Listar todas as tabelas no postgresql information_schema

200

Qual é a melhor maneira de listar todas as tabelas no information_schema do PostgreSQL?

Para esclarecer: Estou trabalhando com um banco de dados vazio (não adicionei nenhuma de minhas próprias tabelas), mas quero ver todas as tabelas na estrutura information_schema.

littleK
fonte

Respostas:

276

Você deve ser capaz de executar apenas select * from information_schema.tablespara obter uma lista de todas as tabelas que estão sendo gerenciadas pelo Postgres para um banco de dados específico.

Você também pode adicionar a where table_schema = 'information_schema'para ver apenas as tabelas no esquema de informações.

RodeoClown
fonte
4
Obrigado, eu apenas tentei: / dt (asterisco). (Asterisco) é diferente?
littleK
Eu não sei nada sobre a coisa / dt (asterisco). (Asterisco), desculpe. Acabei de executar a consulta select no postgres e listou informações sobre todas as tabelas nele. Tente executar a instrução select (no seu banco de dados em branco) e veja o que ela retorna.
RodeoClown
A tentativa do comando acima lista as seguintes tabelas em information_schema: sql_features, sql_implementation_info, sql_languages, sql_packages, sql_parts, sql_sizing, sql_sizing_profiles ..... Então, qual é a diferença entre essas tabelas e as em information_schema.tables?
littleK
2
Todas as tabelas que você listou (através do comando / dt) fornecem meta-informações sobre o banco de dados. Cada uma das tabelas listadas mostra informações diferentes. Assim, por exemplo, a tabela information_schema.tables lista todas as tabelas no banco de dados e seus atributos (como poder ver se é uma tabela ou uma exibição, qual é o nome e outras informações assim). A tabela information_schema.sql_features mostrará quais recursos estão ativados no banco de dados (para que eu possa ver que tenho o Embedded C suportado no meu banco de dados, bem como o SQL direto).
RodeoClown
1
Você pode executar um select * em cada uma das tabelas listadas pelo comando dt - ele acabou de mostrar uma lista de tabelas contendo metadados no banco de dados.
RodeoClown
112

Para listar suas tabelas, use:

SELECT table_name FROM information_schema.tables WHERE table_schema='public'

Ele listará apenas as tabelas que você criar.

phsaires
fonte
E as tabelas que você não cria, mas tem permissão de acesso?
huy
4
Isso mostrará apenas tabelas no esquema público. Você pode criar tabelas em outros esquemas.
21413 Joe Joe Dyk
Além disso, isso não fará distinção entre tabelas e visualizações.
jayarjo
44
\dt information_schema.

do psql, deve ficar bem.


fonte
14

O COMANDO "\ z" também é uma boa maneira de listar tabelas quando estiver dentro da sessão psql interativa.

por exemplo.

# psql -d mcdb -U admin -p 5555
mcdb=# /z
                           Access privileges for database "mcdb"
 Schema |              Name              |   Type   |           Access privileges
--------+--------------------------------+----------+---------------------------------------
 public | activities                     | table    |
 public | activities_id_seq              | sequence |
 public | activities_users_mapping       | table    |
[..]
 public | v_schedules_2                  | view     | {admin=arwdxt/admin,viewuser=r/admin}
 public | v_systems                      | view     |
 public | vapp_backups                   | table    |
 public | vm_client                      | table    |
 public | vm_datastore                   | table    |
 public | vmentity_hle_map               | table    |
(148 rows)
Chris Shoesmith
fonte
1
Isso não lista tabelas em esquemas que não sejam públicos .
Kenny Evitt
10

Você também pode usar

select * from pg_tables where schemaname = 'information_schema'

Em geral, as tabelas pg * permitem que você veja tudo no banco de dados, sem restrições às suas permissões (se você tiver acesso às tabelas, é claro).

Timofey
fonte
9

Para esquema privado 'xxx'no postgresql:

SELECT table_name FROM information_schema.tables 
 WHERE table_schema = 'xxx' AND table_type = 'BASE TABLE'

Sem table_type = 'BASE TABLE', você listará tabelas e visualizações

germanlinux
fonte
8

1. obtenha todas as tabelas e visualizações de information_schema.tables, inclua as de information_schema e pg_catalog.

select * from information_schema.tables

2.get tabelas e visualizações pertencem a determinado esquema

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog')

3.get apenas tabelas (quase \ dt)

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog') and
    table_type = 'BASE TABLE'
hzh
fonte
Se você não filtrar por table_type, todos os tipos de objetos, como tabelas e visualizações, serão misturados.
russellhoff 19/07/19
Para que exatamente where table_schema not in ('information_schema', 'pg_catalog')?
jayarjo
1

Se você deseja uma consulta rápida e suja de uma linha:

select * from information_schema.tables

Você pode executá-lo diretamente na ferramenta Query sem precisar abrir o psql.

(Outras postagens sugerem consultas information_schema mais específicas e agradáveis, mas como um novato, estou descobrindo que essa consulta de uma linha me ajuda a entender a tabela)

Sally Levesque
fonte