psql: SELECT *… tranne una colonna


10

Cerco un modo semplice per selezionare tutte le colonne tranne una in psql.

Con psqlintendo la riga di comando interattiva.

Sarei felice con uno strumento che si espande *in un elenco di nomi di colonne tra virgolette. Quindi ho potuto rimuovere la colonna da rimuovere a mano.

La mia domanda riguarda solo l'uso interattivo di psql. Non è un duplicato di domande di persone insoddisfatte dello standard sql e che vogliono eseguire qualcosa come "select * -foo".


3
Non ce n'è uno, scusa. È possibile eseguire una query information_schematramite una funzione pl / pgsql per generare un elenco abbastanza facilmente, ma in questo modo sarebbero due query.
Craig Ringer,

2
La maggior parte degli strumenti della GUI può farlo. Ma se vuoi (o devi) attenersi alla riga di comando, forse questo ti aiuterà: github.com/dbcli/pgcli
a_horse_with_no_name

@a_horse_with_no_name Vorrei accettare la tua "risposta". Potresti pubblicare una risposta e spiegare l'uso dello strumento pgcli per risolvere la domanda.
Guettli,

eccetto quale colonna? l'ultimo? il primo? O uno casuale?
BAE,

1
@ChengchengPei: non c'è nessun desccomando inpsql
a_horse_with_no_name

Risposte:


4

Per ottenere l'elenco delle colonne in ordine predefinito, senza la colonna errata:

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!

O solo WHERE attrelid = 'mytable'::regclassse ti fidi del percorso di ricerca per risolvere lo schema giusto.

quote_ident() aggiunge virgolette ove necessario.

Ho fatto la stessa domanda nel 2007 su pgsql-general . All'epoca era Postgres 8.2. Dolci ricordi ...

Relazionato:


1
Sembra un elemento da fare, aggiungere un comando barra rovesciata a psql che emetterà una stringa che è un elenco di tutte le colonne di una tabella, opportunamente citato. E si potrebbe fare in modo che omettesse qualsiasi colonna inclusa come argomento extra nel comando. Quindi ipoteticamente \dq thetable bad_column.
jjanes,

@jjanes: Non sono sicuro che possa generare una domanda sufficiente per convincere gli sviluppatori principali a allocare la lettera gratuita qper l'attività. Forse un'opzione generale a tutta la famiglia di \dcomandi per mostrare un elenco nudo di nomi concatenati? Come \d- tbl(mnemonico: l'opposto di \d+, che mostra più dettagli). Ciò consentirebbe di ottenere praticamente qualsiasi elenco nudo di oggetti. Le tabelle in uno schema: \dt- public.*, funzioni che iniziano con "f_foo": \df- f_foo*ecc - o colonne di una tabella: \d- mytbl. Simile a quello che fa il comando shell ls...
Erwin Brandstetter,

Ti do la generosità. Ma qualcosa incorporato in psql sarebbe davvero una bella caratteristica. Grazie Erwin :-)
guettli,

0

Penso di aver trovato quello che cercavi, ma non l'ho provato da solo.

Esiste un software chiamato SequelPro che ti permetterebbe di selezionare i campi da una determinata tabella ma è solo per MySQL. Si prega di leggere dal basso da qualche parte in mezzo alla pagina:

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

Esiste un altro software chiamato PSequel che funziona solo su Mac e afferma che è di tipo SequelPro costruito per Postgres:

http://www.psequel.com/

Spero che sia di aiuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.