Listar tabelas em um esquema do PostgreSQL

329

Quando eu faço um \dtno psql, recebo apenas uma lista de tabelas no esquema atual ( publicpor padrão).

Como posso obter uma lista de todas as tabelas em todos os esquemas ou um esquema específico?

Nyxynyx
fonte

Respostas:

505

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+|)para R*ou (R|)para R?. $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).

Clodoaldo Neto
fonte
6
Simplesmente \dté equivalente a \dt public.*, estou certo?
Frozen Flame
Que tal, digamos, duas tabelas específicas em um esquema específico? Gosta \dt public.user_info, public.user_scope?
James M. Lay
Deixa pra lá, é mais fácil fazer \dt public.a; \dt public.b;em uma linha.
James M. Lay
é uma espécie de implícita .. Se \ dt dá somente tabelas "públicos", não se poderia esperar nada mais via expressões regulares ..
mehmet
1
@FrozenFlame Não é! Por padrão, ele mostra o que há no seu search_pathe é o padrão "$user", public.*. Consequentemente, set search_path=s; \dtlistará todas as tabelas no esquema s.
Lukas Juhrich 25/01
258

Você pode selecionar as tabelas de information_schema

SELECT * FROM information_schema.tables 
WHERE table_schema = 'public'
Jakub Kania
fonte
7
muito útil se sua interface não suportar os atalhos. obrigado.
precisa saber é o seguinte
1
Isso também é bom porque você pode fazer algo como selecionar table_schema, table_name em information_schema.tables, em que table_name seja como '% Whatever%'; . Se você precisa saber qual esquema a tabela está localizada em Não tenho certeza que você pode fazer isso com \ dt
Josh Brown
2
Obrigado, ele funciona no Amazon Redshift e \ dt (resposta aceita) não.
Carlos2W
2
Essa é a resposta mais geralmente útil. information_schema está definido no SQL Standards, e disponível na maioria dos bancos de dados que estejam de acordo
Davos
54

Como alternativa information_schema, é possível usar pg_tables:

select * from pg_tables where schemaname='public';
Radek Postołowicz
fonte
3
nota que se você só quer o nome da tabela é a consulta resultante éSELECT tablename FROM pg_tables WHERE schemaname = 'public';
Grant Humphries
Foi encontrado um problema de permissão ao information_schemanão listar itens do publicesquema, mas o pg_tablesmétodo funcionou bem. Muito Obrigado!
John Crawford
8

Para aqueles que se depararem com isso no futuro:

Se você deseja ver uma lista de relações para vários esquemas:

$psql mydatabase
mydatabase=# SET search_path TO public, usa;   #schema examples
SET
mydatabase=# \dt
              List of relations
 Schema |      Name       | Type  |  Owner
--------+-----------------+-------+----------
 public | counties        | table | postgres
 public | spatial_ref_sys | table | postgres
 public | states          | table | postgres
 public | us_cities       | table | postgres
 usa    | census2010      | table | postgres
Blee
fonte