97 votes

Obtenir le nom du propriétaire de la BD dans PostgreSql

J'ai une base de données "test" dans PostgreSql. Je veux écrire un sql pour obtenir le propriétaire de ma base de données.

109voto

DrColossos Points 7903

Vous pouvez trouver de telles choses dans le catalogue du système

SELECT d.datname as "Name",
pg_catalog.pg_get_userbyid(d.datdba) as "Owner"
FROM pg_catalog.pg_database d
WHERE d.datname = 'database_name'
ORDER BY 1;

78voto

gilad mayani Points 930

Si vous utilisez le psql en ligne de commande, vous pouvez simplement utiliser \l

42voto

AndreaBoc Points 1649

Vous pouvez utiliser la combinaison de pg_database , pg_users les tableaux du système et current_database() de cette manière :

 SELECT u.usename 
 FROM pg_database d
  JOIN pg_user u ON (d.datdba = u.usesysid)
 WHERE d.datname = (SELECT current_database());

9voto

sol Points 101

Peut simplement lancer l'OID du rôle avec la magie ::regrole pour donner le nom du rôle du propriétaire :

SELECT datdba::regrole FROM pg_database WHERE datname = 'test' ;

2voto

jlandercy Points 1399

Cela fonctionne avec une base de données appartenant à un rôle de groupe :

SELECT
    U.rolname
   ,D.datname
FROM
    pg_roles AS U JOIN pg_database AS D ON (D.datdba = U.oid)
WHERE
    D.datname = current_database();

Utilisation de pg_authid (comme je l'ai fait dans ma version précédente) au lieu de pg_roles est limité à SuperUser car il détient le mot de passe (voir documentation ) :

Comme ce catalogue contient des mots de passe, il ne doit pas être accessible au public. publique. pg_roles est une vue lisible par le public sur pg_authid que efface le champ du mot de passe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X