Come posso elencare tutti gli schemi in PostgreSQL?


239

Quando utilizzo PostgreSQL v9.1, come posso elencare tutti gli schemi usando SQL?

Mi aspettavo qualcosa del genere:

SELECT something FROM pg_blah;

Risposte:


259

Per elencare tutti gli schemi, utilizzare lo standard (ANSI) INFORMATION_SCHEMA

select schema_name
from information_schema.schemata;

Maggiori dettagli nel manuale

in alternativa:

select nspname
from pg_catalog.pg_namespace;

Maggiori dettagli su pg_catalog nel manuale


250

Quando si utilizza la psqlriga di comando, è possibile elencare tutti gli schemi con comando \dn.


Grazie. Sarebbe bello avere solo gli schemi restituiti da \ dn, ma in questo caso sto scrivendo un'app bootstrap che si collega usando libpq / libpqxx, quindi non ho accesso alla CLI.
Stéphane,

1
quali sono gli schemi, che \dnelenca, a differenza delle tabelle che \dtelenca?
Tommy,

8
@ Tommy \dtelenca le tabelle per lo schema pubblico. Per mostrare le tabelle di tutti gli schemi utilizzare \dt *.*e per un particolare schema utilizzare \dt schema_name.*.
Grave il

@ Tommy, gli schemi sono spazi dei nomi: potresti avere tabelle diverse con lo stesso nome in spazi dei nomi diversi.
Eppesuig,

38

Connettiti al comando psql -> psql --u {userName} {DBName} quindi puoi digitare il comando seguente per verificare quanti schemi sono presenti nel DB

DBName=# \dn

Altrimenti puoi controllare facilmente la sintassi con i passaggi seguenti-

  1. Dopo aver collegato il DB, premere

    DBName=# help

Otterrai le seguenti opzioni:

Stai usando psql, l'interfaccia della riga di comando di PostgreSQL.
Digitare: \ copyright per i termini di distribuzione
\ h per assistenza con i comandi SQL
\? per aiuto con i comandi psql
\ g o termina con punto e virgola per eseguire la query
\ q per uscire

Quindi premere

DBName=# \?

Otterrai tutte le opzioni molto facilmente.


9

A partire da Postgres 9.3, Un trucco che puoi usare in Postgres per ottenere l'esatto sql di comando informativo (come \ d, \ du, \ dp, ecc.) In psql è usare una transazione. Ecco come va il trucco. Apri una sessione postgres, quindi digita il tuo comando:

begin;
\dn+

Mentre la transazione è ancora in esecuzione, apri un'altra sessione di postgres ed esegui una query su pg_stat_activity per ottenere esattamente sql.

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;

12
Non è necessario ingannarlo; corri e basta\set ECHO_HIDDEN on
Nick Barnes l'

8
o eseguilo comepsql -E
Evan Carroll il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.