Comment lister tous les schémas dans PostgreSQL?

239

Sous PostgreSQL v9.1, comment lister tous les schémas utilisant SQL?

Je m'attendais à quelque chose du genre:

SELECT something FROM pg_blah;
Stéphane
la source

Réponses:

259

Pour répertorier tous les schémas, utilisez le standard (ANSI), INFORMATION_SCHEMA.

select schema_name
from information_schema.schemata;

Plus de détails dans le manuel

alternativement:

select nspname
from pg_catalog.pg_namespace;

Plus de détails sur pg_catalog dans le manuel

un cheval sans nom
la source
250

Lorsque vous utilisez la psqlligne de commande, vous pouvez répertorier tous les schémas avec commande \dn.

eppesuig
la source
Merci. Il serait bien que seuls les schémas soient retournés par \ dn, mais dans ce cas, j'écris une application d'amorçage qui se connecte à l'aide de libpq / libpqxx, je n'ai donc pas d'accès à la CLI.
Stéphane
1
que sont les schémas, ces \dnlistes, par opposition aux tableaux qui les \dtliste?
Tommy
8
@Tommy \dtliste les tables pour le schéma public. Pour afficher les tables de tous les schémas utilisés \dt *.*et pour un schéma particulier \dt schema_name.*.
Sérieux
@Tommy, les schémas sont des espaces de noms: vous pouvez avoir différentes tables portant le même nom dans différents espaces de noms.
eppesuig
38

Connectez-vous à la commande psql -> psql --u {userName} {DBName}. Vous pouvez alors saisir la commande ci-dessous pour vérifier le nombre de schémas présents dans la base de données.

DBName=# \dn

Sinon, vous pouvez vérifier la syntaxe en suivant les étapes ci-dessous.

  1. Après avoir connecté le DB, appuyez sur

    DBName=# help

Vous obtiendrez les options ci-dessous:

Vous utilisez psql, l'interface de ligne de commande de PostgreSQL.
Tapez: \ copyright pour les conditions de distribution
\ h pour obtenir de l'aide sur les commandes SQL
\? pour obtenir de l'aide avec les commandes psql
\ g ou terminez par un point-virgule pour exécuter la requête
\ q to quit

Puis appuyez

DBName=# \?

Vous aurez toutes les options très facilement.

Bhabatosh Bera
la source
9

Commençant sur postgres 9.3, une astuce que vous pouvez utiliser dans postgres pour obtenir le code SQL exact de la commande d’information (telle que \ d, \ du, \ dp, etc.) dans psql consiste à utiliser une transaction. Voici comment l'astuce va. Ouvrez une session postgres, puis tapez votre commande:

begin;
\dn+

Pendant que la transaction est toujours en cours, ouvrez une autre session postgres et interrogez pg_stat_activity pour obtenir le code SQL exact.

postgres=# select query from pg_stat_activity ;
                                 query                                 
-----------------------------------------------------------------------
 SELECT n.nspname AS "Name",                                          +
   pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner",                 +
   pg_catalog.array_to_string(n.nspacl, E'\n') AS "Access privileges",+
   pg_catalog.obj_description(n.oid, 'pg_namespace') AS "Description" +
 FROM pg_catalog.pg_namespace n                                       +
 WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'      +
 ORDER BY 1;
Soni Harriz
la source
12
Vous n'avez pas besoin de le tromper; Il suffit de courir\set ECHO_HIDDEN on
Nick Barnes
8
ou l'exécuter en tant quepsql -E
Evan Carroll