Wenn Sie alle auflisten möchten Tabellen müssen Sie verwenden:
\dt *.*
um anzuzeigen, dass Sie alle Tabellen in allen Schemas haben möchten . Dies schließt Tabellen in pg_catalog
ein , die Systemtabellen und die in information_schema
. Es gibt keine eingebaute Möglichkeit, „alle Tabellen in allen benutzerdefinierten Schemas“ zu sagen; Sie können jedoch Ihren search_path
festlegen zu einer Liste aller relevanten Schemas, bevor Sie \dt
ausführen .
Möglicherweise möchten Sie dies programmgesteuert tun, in diesem Fall psql
Backslash-Befehle werden die Arbeit nicht erledigen. Hier ist das INFORMATION_SCHEMA
kommt zur Rettung. Um Tabellen aufzulisten:
SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
Übrigens, wenn Sie jemals sehen wollen, was psql
ist als Antwort auf einen Backslash-Befehl tut, führen Sie psql
aus mit dem -E
Flagge. zB:
$ psql -E regress
regress=# \list
********* QUERY **********
SELECT d.datname as "Name",
pg_catalog.pg_get_userbyid(d.datdba) as "Owner",
pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding",
d.datcollate as "Collate",
d.datctype as "Ctype",
pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges"
FROM pg_catalog.pg_database d
ORDER BY 1;
**************************
damit Sie diesen psql
sehen können sucht pg_catalog.pg_database
wenn es eine Liste von Datenbanken erhält. Ähnlich für Tabellen innerhalb einer gegebenen Datenbank:
SELECT n.nspname as "Schema",
c.relname as "Name",
CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign table' END as "Type",
pg_catalog.pg_get_userbyid(c.relowner) as "Owner"
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','')
AND n.nspname <> 'pg_catalog'
AND n.nspname <> 'information_schema'
AND n.nspname !~ '^pg_toast'
AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;
Es ist vorzuziehen, das portable SQL-Standard-INFORMATION_SCHEMA
zu verwenden anstelle der Pg-Systemkataloge, wenn möglich, aber manchmal benötigen Sie Pg-spezifische Informationen. In diesen Fällen ist es in Ordnung, die Systemkataloge direkt abzufragen, und psql -E
kann eine hilfreiche Anleitung dafür sein.