Estou procurando uma informação precisa em um banco de dados que não conheço.
É um produto de terceiros, eles demoram para responder a algumas perguntas e eu sei que os dados estão dentro desse banco de dados, então eu quero fazer um pouco de engenharia retro.
Em uma tabela, é possível ter uma lista dos nomes das colunas para esta tabela?
Por exemplo, no SqlServer, é possível despejar uma tabela em CREATE
instruções reutilizáveis , que lista textualmente todas as colunas das quais a tabela é composta.
postgresql
information-schema
catalogs
Stephane Rolland
fonte
fonte
\dt[+] table_name
empsql
.Respostas:
Além da linha de comando que
\d+ <table_name>
você já encontrou, você também pode usar o Esquema de Informações para procurar os dados da coluna, usandoinformation_schema.columns
:Nota: Conforme o exemplo acima, verifique se os valores estão entre aspas.
fonte
\x on
ou\pset expanded on
para tornar os resultados da consulta linear (em vez de tabular) e, portanto, mais fácil de ler stackoverflow.com/a/9605093/513397\d+ public.*
para obter a descrição (esquema + indeces / fkeys / triggers) de todas as suas tabelas e visualizações nopublic
esquema. Nós o usamos em nosso script de gancho pré-confirmação para acompanhar as mudanças no banco de dados feitas por cada confirmação.Como um complemento para as outras respostas, mesmo uma instrução SELECT que não retorna linhas irá expor os nomes das colunas para você e para o código do aplicativo.
As permissões podem entrar em jogo com qualquer uma dessas abordagens.
fonte
O esquema de informações é lento e seguro: é padronizado e amplamente portável para outros bancos de dados que o suportam. E continuará trabalhando nas principais versões.
No entanto, as visualizações no esquema de informações geralmente se juntam a 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 mudará nas principais versões.
psql
(a interface da linha de comando nativa) toma a pista rápida, é claro, e consulta a fonte diretamente. Se você começarpsql
com o parâmetro-E
, o SQL atrás dos comandos de barra invertida como\d
será exibido. Ou a\set ECHO_HIDDEN on
partir da linha de comando psql. A partir daí, você pode criar uma resposta para sua pergunta.Mais rápido que consultar
information_schema.columns
. TenteEXPLAIN ANALYZE
ver por si mesmo. Ainda dificilmente importa para uma consulta única. Mas pode fazer a diferença se usado em uma consulta / função repetida várias vezes.Também existem diferenças sutis na visibilidade. Comparação detalhada:
fonte
-E
e mostra às pessoas como obter o sql do psql.psql
no PostgreSQL 11+Se você estiver procurando os tipos de coluna em uma consulta, poderá usar
psql
os\gdesc
fonte
Apenas PostgreSQL
Isso é um tanto obsceno, mas pode ser um candidato se você estiver procurando pelo menor SQL possível:
ou até mais curto (supondo que haja pelo menos uma linha presente na tabela)
A listagem preserva o pedido. Caso você não se importe com o pedido e tenha a
hstore
extensão instalada, você pode fazer ainda maisfonte