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.

Mihai Limbășan
fonte
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.

JLarky
fonte
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');
Milen A. Radev
fonte
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
Yuci
fonte
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.

nish
fonte
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;        
**************************
bsb
fonte
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.

Shashishekhar Hasabnis
fonte
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

Usuário banido
fonte
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.* 
Ariano
fonte
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

J4cK
fonte
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';
Reynante Daitol
fonte
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
rotarydial
fonte
12
select 
  * 
from 
  pg_catalog.pg_tables 
where 
  schemaname != 'information_schema' 
  and schemaname != 'pg_catalog';
Abdelhak Ohammou
fonte
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.

user4642897
fonte
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.

JohnK
fonte
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
MisterJoyson
fonte
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+
Usman Yaqoob
fonte
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.

Alain Cherpin
fonte
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
Yordan Georgiev
fonte
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.

lauri108
fonte
0

Para visualizar tabelas estrangeiras no psql, execute \dE

Ian Hunter
fonte
0

Primeiro, insira qual banco de dados você precisa conectar

\c database_name

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

\dt
Poonkodi
fonte
-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

Patcho
fonte