Pokud chcete uvést všechny tabulky, musíte použít:
\dt *.*
označíte, že chcete všechny tabulky ve všech schématech . To bude zahrnovat tabulky v pg_catalog
, systémové tabulky a ty v information_schema
. Neexistuje žádný vestavěný způsob, jak říci „všechny tabulky ve všech uživatelsky definovaných schématech“; můžete však nastavit search_path
před spuštěním \dt
na seznam všech zajímavých schémat .
Možná to budete chtít provést programově, v takovém případě psql
zpětné lomítko-příkazy tuto práci nesplní. Zde je INFORMATION_SCHEMA
přichází na pomoc. Seznam tabulek:
SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
BTW, pokud chcete někdy vidět, co psql
jako odpověď na příkaz zpětného lomítka spusťte psql
pomocí -E
vlajka. např.:
$ 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;
**************************
takže můžete vidět, že psql
hledá pg_catalog.pg_database
když dostane seznam databází. Podobně pro tabulky v dané databázi:
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;
Je vhodnější použít přenosný INFORMATION_SCHEMA
standardu SQL místo katalogů systému Pg, kde je to možné, ale někdy potřebujete informace specifické pro Pg. V těchto případech je v pořádku dotazovat se přímo na systémové katalogy a psql -E
může být užitečným průvodcem, jak to udělat.