AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 22362
Accepted
Stephane Rolland
Stephane Rolland
Asked: 2012-08-14 04:44:44 +0800 CST2012-08-14 04:44:44 +0800 CST 2012-08-14 04:44:44 +0800 CST

Listar todas as colunas de uma tabela especificada

  • 772

Estou procurando uma informação precisa em um banco de dados sobre o qual não tenho conhecimento. O banco de dados está em uma máquina separada, mas posso fazer login nele e iniciar uma psqllinha de comando, com direitos de administrador.

É um produto de terceiros e eles demoram a responder perguntas. Eu sei que os dados estão dentro desse banco de dados, então quero fazer um pouco de engenharia reversa.

Dado um nome de tabela, é possível obter uma lista dos nomes das colunas dessa tabela?

Por exemplo, no SQL Server, é possível despejar uma tabela em uma CREATEinstrução reutilizável, que lista textualmente todas as colunas das quais a tabela é composta.

postgresql metadata
  • 5 5 respostas
  • 891070 Views

5 respostas

  • Voted
  1. Best Answer
    bhamby
    2012-08-14T05:27:53+08:002012-08-14T05:27:53+08:00

    Além da linha de comando que \d+ <table_name>você já encontrou, você também pode usar o Esquema de Informações para pesquisar os dados da coluna, usando information_schema.columns:

    SELECT *
      FROM information_schema.columns
     WHERE table_schema = 'your_schema'
       AND table_name   = 'your_table'
         ;
    

    Nota: Conforme o exemplo acima, certifique-se de que os valores estejam entre aspas.

    • 551
  2. Mike Sherrill 'Cat Recall'
    2012-08-14T23:13:19+08:002012-08-14T23:13:19+08:00

    Como complemento às outras respostas, mesmo uma instrução SELECT que não retorne nenhuma linha irá expor os nomes das colunas para você e para o código do aplicativo.

    select *
    from table_name
    where false;
    

    Eu pretendo que isso seja executável por quase qualquer software cliente para quase qualquer DBMS. ( Quase ? Sim, alguns não suportam uma cláusula como where false. Em vez disso, eles exigem uma expressão como where 1 = 0.)

    As permissões podem entrar em jogo com qualquer uma dessas abordagens.

    • 137
  3. Erwin Brandstetter
    2012-08-14T15:05:19+08:002012-08-14T15:05:19+08:00

    O esquema de informações é o caminho mais lento e seguro: é padronizado e amplamente portátil para outros bancos de dados que o suportam. E continuará funcionando nas principais versões.

    No entanto, as visualizações no esquema de informações geralmente unem muitas tabelas dos catálogos do sistema para atender a um formato estritamente padronizado - muitas das quais são apenas frete morto na maioria das vezes. Isso os torna lentos .
    Os desenvolvedores do Postgres não estão fazendo promessas, mas o básico (como o que é necessário aqui) não vai mudar nas versões principais.

    Avaliação mais detalhada:

    • Consulta para nomes de saída e tipos de dados de uma consulta, tabela ou exibição

    psql(a interface de linha de comando nativa) toma a via rápida, é claro, e consulta a fonte diretamente. Se você iniciar psqlcom o parâmetro-E , os comandos SQL por trás de barra invertida como serão \dexibidos. Ou \set ECHO_HIDDEN ona partir da linha de comando do psql. A partir daí, você pode construir uma resposta para sua pergunta.

    Dada uma tabela, é possível ter uma lista dos nomes das colunas dessa tabela.

    SELECT attrelid::regclass AS tbl
         , attname            AS col
         , atttypid::regtype  AS datatype
           -- more attributes?
    FROM   pg_attribute
    WHERE  attrelid = 'myschema.mytable'::regclass  -- table name optionally schema-qualified
    AND    attnum > 0
    AND    NOT attisdropped
    ORDER  BY attnum;
    

    Mais rápido do que consultarinformation_schema.columns . Tente EXPLAIN ANALYZEver por si mesmo. Ainda dificilmente importa para uma consulta única. Mas pode fazer diferença se usado em uma consulta/função repetida muitas vezes.

    Há também diferenças sutis na visibilidade. Comparação detalhada:

    • Como verificar se uma tabela existe em um determinado esquema
    • 89
  4. Evan Carroll
    2018-07-07T11:08:40+08:002018-07-07T11:08:40+08:00

    psqlno PostgreSQL 11+

    Se estiver procurando os tipos de coluna em uma consulta, você pode usar psql's\gdesc

    SELECT
        NULL AS zero,
        1 AS one,
        2.0 AS two,
        'three' AS three,
        $1 AS four,
        sin($2) as five,
        'foo'::varchar(4) as six,
        CURRENT_DATE AS now
    \gdesc
     Column |         Type         
    --------+----------------------
     zero   | text
     one    | integer
     two    | numeric
     three  | text
     four   | text
     five   | double precision
     six    | character varying(4)
     now    | date
    (8 rows)
    
    • 12
  5. oᴉɹǝɥɔ
    2019-09-05T11:26:14+08:002019-09-05T11:26:14+08:00

    Somente PostgreSQL

    Isso é um pouco piegas, mas pode ser um concorrente se você estiver procurando pelo SQL mais curto possível:

    SELECT json_object_keys(to_json(json_populate_record(NULL::schema_name.table_name, '{}'::JSON)))
    

    ou ainda mais curto (supondo que haja pelo menos uma linha presente na tabela)

    SELECT json_object_keys(to_json((SELECT t FROM schema_name.table_name t LIMIT 1)))
    

    A listagem preserva a ordem. Caso você não se importe com o pedido e tenha a hstoreextensão instalada, você pode fazer ainda mais curto

    SELECT skeys(hstore(NULL::schema_name.table_name))
    
    • 8

relate perguntas

  • Posso ativar o PITR depois que o banco de dados foi usado

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve