PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Psql lista todas as tabelas


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.