Jeśli chcesz wymienić wszystkie tabele, musisz użyć:
\dt *.*
aby wskazać, że chcesz, aby wszystkie tabele we wszystkich schematach . Obejmuje to tabele w pg_catalog , tabele systemowe i te w information_schema . Nie ma wbudowanego sposobu powiedzenia „wszystkie tabele we wszystkich schematach zdefiniowanych przez użytkownika”; możesz jednak ustawić swoją search_path do listy wszystkich interesujących schematów przed uruchomieniem \dt .
Możesz to zrobić programowo, w takim przypadku psql polecenia z odwrotnym ukośnikiem nie wykonają zadania. W tym miejscu INFORMATION_SCHEMA przychodzi na ratunek. Aby wyświetlić tabele:
SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
BTW, jeśli kiedykolwiek chcesz zobaczyć, co psql robi w odpowiedzi na polecenie odwrotnego ukośnika, uruchom psql z -E flaga. np.:
$ 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;
**************************
więc możesz zobaczyć, że psql przeszukuje pg_catalog.pg_database kiedy otrzyma listę baz danych. Podobnie dla tabel w danej bazie danych:
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;
Lepiej jest używać przenośnego INFORMATION_SCHEMA w standardzie SQL zamiast katalogów systemowych PG tam, gdzie to możliwe, ale czasami potrzebujesz informacji specyficznych dla PG. W takich przypadkach dobrze jest bezpośrednio odpytywać katalogi systemowe i psql -E może być pomocnym przewodnikiem, jak to zrobić.