Se você deseja listar todos tabelas, você deve usar:
\dt *.*
para indicar que você deseja que todas as tabelas em todos os esquemas . Isso incluirá tabelas em
pg_catalog
, as tabelas do sistema e aquelas em information_schema
. Não há uma maneira interna de dizer "todas as tabelas em todos os esquemas definidos pelo usuário"; você pode, no entanto, definir seu search_path
a uma lista de todos os esquemas de interesse antes de executar \dt
. Você pode querer fazer isso programaticamente, nesse caso
psql
comandos de barra invertida não farão o trabalho. É aqui que o INFORMATION_SCHEMA
vem em socorro. Para listar tabelas:SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
BTW, se você quiser ver o que
psql
está fazendo em resposta a um comando de barra invertida, execute psql
com o -E
bandeira. por exemplo:$ 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;
**************************
para que você possa ver que
psql
está pesquisando pg_catalog.pg_database
quando obtém uma lista de bancos de dados. Da mesma forma, para tabelas em um determinado banco de dados: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;
É preferível usar o padrão SQL, portátil
INFORMATION_SCHEMA
em vez dos catálogos do sistema Pg sempre que possível, mas às vezes você precisa de informações específicas do Pg. Nesses casos, não há problema em consultar os catálogos do sistema diretamente e psql -E
pode ser um guia útil sobre como fazê-lo.