Jak wyświetlić listę wszystkich schematów w PostgreSQL?


239

Gdy korzystam z PostgreSQL v9.1, jak wyświetlić wszystkie schematy za pomocą SQL?

Spodziewałem się czegoś w stylu:

SELECT something FROM pg_blah;

Odpowiedzi:


258

Aby wyświetlić listę wszystkich schematów, użyj standardu (ANSI) INFORMACJE_SCHEMA

select schema_name
from information_schema.schemata;

Więcej szczegółów w instrukcji

alternatywnie:

select nspname
from pg_catalog.pg_namespace;

Więcej szczegółów na temat pg_catalog w instrukcji


250

Korzystając z psqlwiersza polecenia, możesz wyświetlić wszystkie schematy za pomocą polecenia \dn.


Dzięki. Byłoby miło, gdyby tylko schematy zostały zwrócone przez \ dn, ale w tym przypadku piszę aplikację ładującą, która łączy się za pomocą libpq / libpqxx, więc nie mam dostępu do CLI.
Stéphane

1
jakie schematy, które to \dnlisty, w przeciwieństwie do tabel, które to \dtlisty?
Tommy

8
@ Tommy \dtwyświetla tabele dla schematu publicznego. Aby wyświetlić tabele wszystkich używanych schematów \dt *.*i dla konkretnego zastosowania schematu \dt schema_name.*.
Poważny

@Tommy, schematy to przestrzenie nazw: możesz mieć różne tabele o tej samej nazwie w różnych przestrzeniach nazw.
eppesuig

38

Połącz się z komendą psql -> psql --u {nazwa_użytkownika} {DBName}, a następnie możesz wpisać poniższe polecenie, aby sprawdzić, ile schematów znajduje się w DB

DBName=# \dn

W przeciwnym razie możesz łatwo sprawdzić składnię, wykonując poniższe czynności:

  1. Po podłączeniu DB naciśnij

    DBName=# help

Otrzymasz następujące opcje:

Używasz psql, interfejsu wiersza poleceń PostgreSQL.
Wpisz: \ copyright dla warunków dystrybucji
\ h, aby uzyskać pomoc dotyczącą poleceń SQL
\? po pomoc z komendami psql
\ g lub zakończ średnikiem, aby wykonać zapytanie
\ q, aby wyjść

Następnie wciśnij

DBName=# \?

Wszystkie opcje otrzymasz bardzo łatwo.


9

Począwszy od Postgres 9.3, jedną sztuczką, której możesz użyć w postgres, aby uzyskać dokładną sql polecenia informacyjnego (takiego jak \ d, \ du, \ dp, itp.) W psql, jest użycie transakcji. Oto jak przebiega sztuczka. Otwórz jedną sesję postgres, a następnie wpisz polecenie:

begin;
\dn+

Podczas gdy transakcja nadal trwa, otwórz kolejną sesję postgres i przeprowadź kwerendę o działanie pg_stat_activity, aby uzyskać dokładną 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
Nie musisz oszukiwać; po prostu biegnij\set ECHO_HIDDEN on
Nick Barnes

8
lub uruchom jakopsql -E
Evan Carroll,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.