Quando eu faço um \dt
no psql, recebo apenas uma lista de tabelas no esquema atual ( public
por padrão).
Como posso obter uma lista de todas as tabelas em todos os esquemas ou um esquema específico?
fonte
Quando eu faço um \dt
no psql, recebo apenas uma lista de tabelas no esquema atual ( public
por padrão).
Como posso obter uma lista de todas as tabelas em todos os esquemas ou um esquema específico?
Em todos os esquemas:
=> \dt *.*
Em um esquema específico:
=> \dt public.*
É possível usar expressões regulares com algumas restrições
\dt (public|s).(s|t)
List of relations
Schema | Name | Type | Owner
--------+------+-------+-------
public | s | table | cpn
public | t | table | cpn
s | t | table | cpn
Usuários avançados podem usar notações de expressão regular, como classes de caracteres, por exemplo [0-9] para corresponder a qualquer dígito. Todos os caracteres especiais de expressão regular funcionam conforme especificado na Seção 9.7.3, exceto pelo
.
que é considerado como um separador, como mencionado acima,*
que é traduzido para a notação de expressão regular e.*
,?
que é traduzida para.
e$
que é correspondida literalmente. Você pode emular esses caracteres padrão quando necessário, escrevendo?
para.
,(R+|)
paraR*
ou(R|)
paraR?
.$
não é necessário como um caractere de expressão regular, pois o padrão deve corresponder ao nome inteiro, diferente da interpretação usual das expressões regulares (em outras palavras,$
é automaticamente anexado ao seu padrão). Escreva*
no início e / ou no final se não desejar que o padrão seja ancorado. Observe que, entre aspas duplas, todos os caracteres especiais de expressão regular perdem seus significados especiais e são correspondidos literalmente. Além disso, os caracteres especiais da expressão regular são correspondidos literalmente nos padrões de nome do operador (ou seja, o argumento de\do
).
\dt
é equivalente a\dt public.*
, estou certo?\dt public.user_info, public.user_scope
?\dt public.a; \dt public.b;
em uma linha.search_path
e é o padrão"$user", public.*
. Consequentemente,set search_path=s; \dt
listará todas as tabelas no esquemas
.Você pode selecionar as tabelas de
information_schema
fonte
Como alternativa
information_schema
, é possível usarpg_tables
:fonte
SELECT tablename FROM pg_tables WHERE schemaname = 'public';
information_schema
não listar itens dopublic
esquema, mas opg_tables
método funcionou bem. Muito Obrigado!Para aqueles que se depararem com isso no futuro:
Se você deseja ver uma lista de relações para vários esquemas:
fonte