PostgreSQL: mostra tabelas no PostgreSQL


Respostas:


2661

Na psqlinterface da linha de comandos,

Primeiro, escolha seu banco de dados

\c database_name

Em seguida, isso mostra todas as tabelas no esquema atual:

\dt

Programaticamente (ou a partir da psqlinterface também, é claro):

SELECT * FROM pg_catalog.pg_tables;

As tabelas do sistema estão no pg_catalogbanco de dados.


102
@StephenCorwin Não, \lé o equivalente show databasesno MySQL. dtshow tablese lshow databases
user454322

12
\dté muito útil. Essa pg_catalog.pg_tablesé muito menos, pois parece agrupar tabelas internas em conjunto com as criadas pelo usuário para qualquer banco de dados ao qual você esteja conectado.
Aroth

33
psql my_db_namedeve ser executado \dtpara funcionar. Quando eu corri psqlsem o nome de um banco de dados, recebi a mensagem "Nenhuma relação encontrada"
Maksim Dmitriev

31
Sem tabelas de sistema:SELECT * FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema'
Matt White

39
Você primeiro precisa \c <DATABASE_NAME>escolher seu banco de dados.
Danio

200

Faça login como superusuário:

sudo -u postgres psql

Você pode listar todos os bancos de dados e usuários por \lcomando ((listar outros comandos por \?)).

Agora, se você quiser ver outros bancos de dados, poderá alterar usuário / banco de dados por \ccomando \c template1, como , \c postgres postgrese usar \d, \dtou \dSpara ver tabelas / visualizações / etc.


1
Essa é uma resposta melhor, pois geralmente é possível ter mais de um banco de dados instalado.
11134 Jerome

Isso foi muito útil. Obrigado.
Promise Preston

123

(Para completar)

Você também pode consultar o esquema de informações (padrão SQL) :

SELECT
    table_schema || '.' || table_name
FROM
    information_schema.tables
WHERE
    table_type = 'BASE TABLE'
AND
    table_schema NOT IN ('pg_catalog', 'information_schema');

3
+1 embora, para completar, o mysql show tables mostre apenas o esquema atual, é bom pensar dessa maneira, o mysql possui apenas um banco de dados, mas vários esquemas, em que o postgresql pode ter vários bancos de dados (catálogos) e esquemas. Portanto, o equiv deve ser table_schema = 'DB_NAME';
Rahly 28/05

Não é exatamente sql padrão, não pode usar "||" às cordas concatenar na mssql
Chronon

123

Você pode usar o terminal interativo Psql do PostgreSQL para mostrar tabelas no PostgreSQL.

1. Inicie o Psql

Geralmente você pode executar o seguinte comando para entrar no psql:

psql DBNAME USERNAME

Por exemplo, psql template1 postgres

Uma situação que você pode ter é: suponha que você efetue login como root e não se lembre do nome do banco de dados. Você pode simplesmente entrar primeiro no Psql executando:

sudo -u postgres psql

Em alguns sistemas, o comando sudo não está disponível, você pode executar um dos comandos abaixo:

psql -U postgres
psql --username=postgres

2. Mostrar tabelas

Agora no Psql você pode executar comandos como:

  1. \? listar todos os comandos
  2. \l listar bancos de dados
  3. \conninfo exibir informações sobre a conexão atual
  4. \c [DBNAME] conectar ao novo banco de dados, por exemplo, \c template1
  5. \dt listar tabelas do esquema público
  6. \dt <schema-name>.* listar tabelas de determinado esquema, por exemplo, \dt public.*
  7. \dt *.* listar tabelas de todos os esquemas
  8. Em seguida, você pode executar instruções SQL, por exemplo, SELECT * FROM my_table;(Nota: uma instrução deve ser finalizada com ponto e vírgula ;)
  9. \q saia do psql

52
  1. Primeiro login como usuário do postgres:

    sudo su - postgres

  2. conecte ao banco de dados necessário: psql -d databaseName

  3. \dt retornaria a lista de todas as tabelas no banco de dados ao qual você está conectado.


40

A execução do psql com o sinalizador -E fará eco à consulta usada internamente para implementar \ dt e similares:

sudo -u postgres psql -E

postgres=# \dt       
********* QUERY **********
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' 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;        
**************************

1
BTW, TOAST é usado para armazenar grandes valores: postgresql.org/docs/8.3/static/storage-toast.html
Dorian

39

Efetue login como superusuário para poder verificar todos os bancos de dados e seus esquemas: -

sudo su - postgres

Em seguida, podemos acessar o shell do postgresql usando o seguinte comando: -

psql

Agora você pode verificar toda a lista de bancos de dados usando o seguinte comando: -

\l

Se você deseja verificar os tamanhos dos bancos de dados, use também: -

\l+

pressione q para voltar.

Depois de encontrar seu banco de dados agora, você pode conectar-se a esse banco de dados usando o seguinte comando: -

\c database_name

Uma vez conectado, você pode verificar as tabelas ou o esquema do banco de dados:

\d

Agora, para voltar ao uso do shell: -

q

Agora, para ver mais detalhes de uma determinada tabela, use: -

\d table_name

Para voltar ao postgresql_shell, pressione \q .

E para retornar ao terminal pressione exit.


24

Se você quiser ver apenas a lista de tabelas que criou, poderá apenas dizer:

\dt

Mas também temos PATTERNquais ajudarão a personalizar as tabelas a serem exibidas. Para mostrar tudo, incluindo o pg_catalogesquema, você pode adicionar *.

\dt *

Se você fizer: \?

\ dt [S +] [PATTERN] tabelas de lista


23

use apenas ver tabelas

=> \dt

se quiser ver tabelas de esquema

=>\dt+

se você quiser ver tabelas de esquema específicas

=>\dt schema_name.* 

Eu tenho certeza que você está confundindo +com S. O último (a letra) mostra tabelas de esquema. O +simplesmente mostra informações extras.
Garret Wilson

20

Primeiro, conecte-se ao banco de dados usando o seguinte comando

\c database_name

E você verá esta mensagem - You are now connected to database database_name. E eles executam o seguinte comando

SELECT * FROM table_name;

Em database_name e table_name, atualize com o banco de dados e o nome da tabela


20
Não sei se isso está respondendo à pergunta. Eu acho que o OP está tentando conhecer todas as tabelas em seu banco de dados, não obter todas as linhas de uma tabela específica em seu banco de dados ... certo?
snuggles

16

Se você estiver usando o pgAdmin4 no PostgreSQL, poderá usar isso para mostrar as tabelas no seu banco de dados:

select * from information_schema.tables where table_schema='public';

14

Observe que \dtsozinho listará as tabelas em público esquema do banco de dados que você está usando. Eu gosto de manter minhas tabelas em esquemas separados, para que a resposta aceita não funcione para mim.

Para listar todas as tabelas em um esquema específico , eu precisava:

1) Conecte-se ao banco de dados desejado:

psql mydb

2) Especifique o nome do esquema para o qual quero ver as tabelas após o \dtcomando, desta forma:

\dt myschema.*

Isso mostra os resultados nos quais estou interessado:

               List of relations
 Schema   |       Name      | Type  |  Owner   
----------+-----------------+-------+----------
 myschema | users           | table | postgres
 myschema | activity        | table | postgres
 myschema | roles           | table | postgres

12
select 
  * 
from 
  pg_catalog.pg_tables 
where 
  schemaname != 'information_schema' 
  and schemaname != 'pg_catalog';

8

\ dt (não * obrigatório) - listará todas as tabelas de um banco de dados existente ao qual você já está conectado. Também é útil observar:

\ d [nome_tabela] - mostrará todas as colunas de uma determinada tabela, incluindo informações de tipo, referências e restrições de chave.


6

Você pode listar as tabelas no banco de dados atual com \dt.

Fwiw, \d tablenamemostrará detalhes sobre a tabela fornecida, algo como show columns from tablenameno MySQL, mas com um pouco mais de informação.


5

Usando psql : \ dt

Ou:

SELECT c.relname AS Tables_in FROM pg_catalog.pg_class c
        LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE pg_catalog.pg_table_is_visible(c.oid)
        AND c.relkind = 'r'
        AND relname NOT LIKE 'pg_%'
ORDER BY 1

3

Primeiro de tudo você precisa se conectar ao seu banco de dados como

meu banco de dados é ubuntu

use este comando para conectar

 \c ubuntu

Esta mensagem irá mostrar

"Agora você está conectado ao banco de dados" ubuntu "como usuário" postgres "."

Agora

Execute este comando para mostrar todas as tabelas nele

\d+

3

A maneira mais direta de listar todas as tabelas na linha de comando é, para meu gosto:

psql -a -U <user> -p <port> -h <server> -c "\dt"

Para um determinado banco de dados, adicione o nome do banco de dados:

psql -a -U <user> -p <port> -h <server> -c "\dt" <database_name>

Funciona em Linux e Windows.


3

como um guia rápido

# just list all the postgres tables sorted in the terminal
db='my_db_name'
clear;psql -d $db -t -c '\dt'|cut -c 11-|perl -ne 's/^([a-z_0-9]*)( )(.*)/$1/; print'

ou se você preferir um liner de saída json muito mais claro:

IFS='' read -r -d '' sql_code <<"EOF_CODE"
    select array_to_json(array_agg(row_to_json(t))) from (
        SELECT table_catalog,table_schema,table_name 
        FROM information_schema.tables
        ORDER BY table_schema,table_name ) t
EOF_CODE
psql -d postgres -t -q -c "$sql_code"|jq

1

\ dt listará as tabelas e "\ pset pager off" as mostrará na mesma janela, sem mudar para outra. Ame esse recurso até a morte em dbshell.



0

Primeiro, insira qual banco de dados você precisa conectar

\c database_name

Em seguida, isso mostra todas as tabelas no esquema atual:

\dt

-2

Primeiro você pode se conectar ao seu banco de dados postgres usando o postgre.app no ​​mac ou usando o postico. Execute o seguinte comando:

psql -h localhost -p port_number -d database_name -U user_name -W

então você digita sua senha, isso deve dar acesso ao seu banco de dados

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.