Als u alle wilt weergeven tabellen, moet u gebruiken:
\dt *.*
om aan te geven dat u alle tabellen in alle schema's . wilt . Dit omvat tabellen in pg_catalog
, de systeemtabellen en die in information_schema
. Er is geen ingebouwde manier om te zeggen "alle tabellen in alle door de gebruiker gedefinieerde schema's"; u kunt echter uw search_path
. instellen naar een lijst met alle interessante schema's voordat u \dt
. uitvoert .
Misschien wilt u dit programmatisch doen, in welk geval psql
backslash-commando's zullen het werk niet doen. Dit is waar de INFORMATION_SCHEMA
komt te hulp. Tabellen weergeven:
SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
Trouwens, als je ooit wilt zien wat psql
doet in reactie op een backslash-commando, voer psql
. uit met de -E
vlag. bijv.:
$ 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;
**************************
zodat je kunt zien dat psql
zoekt pg_catalog.pg_database
wanneer het een lijst met databases krijgt. Evenzo, voor tabellen binnen een bepaalde database:
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;
Het verdient de voorkeur om de SQL-standaard, draagbare INFORMATION_SCHEMA
. te gebruiken in plaats van de Pg-systeemcatalogi waar mogelijk, maar soms heeft u Pg-specifieke informatie nodig. In die gevallen is het prima om de systeemcatalogi rechtstreeks te raadplegen, en psql -E
kan een handige gids zijn om dit te doen.