psql: SELECT *… exceto uma coluna


10

Eu procuro uma maneira simples de selecionar todas as colunas, exceto uma no psql.

Com psqleu quero dizer a linha de comando interativa.

Eu ficaria feliz com uma ferramenta que se expande *para uma lista de nomes de colunas citados. Então eu poderia remover a coluna para remover manualmente.

Minha pergunta é apenas sobre o uso interativo do psql. Não é uma duplicata de perguntas de pessoas insatisfeitas com o padrão sql e que desejam executar algo como "select * -foo".


3
Não há um, desculpe. Você pode consultar information_schemaatravés de uma função pl / pgsql para gerar uma lista com bastante facilidade, mas dessa forma seriam duas consultas.
Craig Ringer

2
A maioria das ferramentas da GUI pode fazer isso. Mas se você quiser (ou têm que) stick para a linha de comando, talvez isso ajude: github.com/dbcli/pgcli
a_horse_with_no_name

@a_horse_with_no_name Gostaria de aceitar sua "resposta". Você poderia postar uma resposta e explicar o uso da ferramenta pgcli que resolve a questão.
guettli

exceto qual coluna? o último? o primeiro? Ou aleatório?
BAE

11
@ChengchengPei: não há desccomandopsql
a_horse_with_no_name

Respostas:


4

Para obter a lista de colunas na ordem padrão, sem a coluna incorreta:

SELECT string_agg(quote_ident(attname), ', ' ORDER BY attnum)
FROM   pg_attribute
WHERE  attrelid = 'myschema.mytable'::regclass
AND    NOT attisdropped  -- no dropped (dead) columns
AND    attnum > 0        -- no system columns
AND    attname <> 'bad_column'  -- case sensitive!

Ou apenas WHERE attrelid = 'mytable'::regclassse você confiar no caminho de pesquisa para resolver o esquema correto.

quote_ident() adiciona aspas duplas quando necessário.

Fiz a mesma pergunta em 2007 no pgsql-general . Era o Postgres 8.2 naquela época. Doces lembranças ...

Relacionado:


11
Soa como um item de tarefa, para adicionar ao psql um comando de barra invertida que emitirá uma string que é uma lista de todas as colunas de uma tabela, adequadamente citadas. E você pode omitir quaisquer colunas que foram incluídas como argumentos extras no comando. Tão hipoteticamente \dq thetable bad_column.
jjanes

@janjanes: não tenho certeza de que possa gerar demanda suficiente para convencer os desenvolvedores principais a alocar a carta livre qpara a tarefa. Talvez seja uma opção geral para toda a família de \dcomandos para mostrar uma lista simples de nomes concatenados? Like \d- tbl(mnemônico: o oposto de \d+, que mostra mais detalhes). Isso permitiria obter basicamente qualquer lista simples de objetos. Tabelas de um esquema: \dt- public.*, funções que começam com "f_foo": \df- f_foo*etc - ou colunas numa tabela: \d- mytbl. Semelhante ao que o comando shell lsfaz ...
Erwin Brandstetter

Eu te dou a recompensa. Mas algo embutido no psql seria realmente um recurso interessante. Obrigado Erwin :-)
guettli

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.