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".

guettli
fonte
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:

Erwin Brandstetter
fonte
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
0

Acho que encontrei o que você está procurando, mas não testei eu mesmo.

Existe um software chamado SequelPro que permite selecionar os campos de uma determinada tabela, mas é apenas para o MySQL. Leia abaixo em algum lugar no meio da página:

http://www.sequelpro.com/docs/Working_with_Query_Favorites

Existe outro software chamado PSequel, que roda apenas no Mac e afirma ser do tipo SequelPro criado para o Postgres:

http://www.psequel.com/

Espero que isto ajude.

Não consolidado
fonte