psql: SELECT *… mit Ausnahme einer Spalte

10

Ich suche nach einer einfachen Möglichkeit, alle Spalten außer einer in psql auszuwählen.

Mit psqlmeine ich die interaktive Kommandozeile.

Ich würde mich über ein Tool freuen, das sich *zu einer Liste zitierter Spaltennamen erweitert. Dann könnte ich die Säule entfernen, um sie von Hand zu entfernen.

Meine Frage betrifft nur die interaktive Verwendung von psql. Es ist kein Duplikat von Fragen von Personen, die mit dem SQL-Standard unzufrieden sind und etwas wie "select * -foo" ausführen möchten.

guettli
quelle
3
Es gibt keinen, sorry. Sie können information_schemaüber eine pl / pgsql-Funktion abfragen, um eine Liste ziemlich einfach zu generieren, aber auf diese Weise wären es zwei Abfragen.
Craig Ringer
2
Die meisten GUI-Tools können das. Aber wenn Sie sich an die Befehlszeile halten möchten (oder müssen), hilft dies möglicherweise: github.com/dbcli/pgcli
a_horse_with_no_name
@a_horse_with_no_name Ich möchte Ihre "Antwort" akzeptieren. Könnten Sie bitte eine Antwort posten und die Verwendung des pgcli-Tools zur Lösung der Frage erläutern?
Guettli
außer welcher Spalte? der Letzte? der erste? Oder zufällig?
BAE
1
@ChengchengPei: Es gibt keinen descBefehl inpsql
a_horse_with_no_name

Antworten:

4

So erhalten Sie die Liste der Spalten in der Standardreihenfolge ohne die fehlerhafte Spalte:

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!

Oder nur, WHERE attrelid = 'mytable'::regclasswenn Sie dem Suchpfad vertrauen , dass er in das richtige Schema aufgelöst wird.

quote_ident() fügt bei Bedarf doppelte Anführungszeichen hinzu.

Ich habe die gleiche Frage 2007 auf pgsql-general gestellt . Es war damals Postgres 8.2. Süße Erinnerungen ...

Verbunden:

Erwin Brandstetter
quelle
1
Es klingt wie ein To-Do-Element, psql einen Backslash-Befehl hinzuzufügen, der eine Zeichenfolge ausgibt, die eine Liste aller Spalten für eine Tabelle in angemessenen Anführungszeichen darstellt. Und Sie könnten alle Spalten weglassen, die als zusätzliche Argumente für den Befehl enthalten waren. Also hypothetisch \dq thetable bad_column.
jjanes
@jjanes: Ich bin nicht sicher, ob es genug Nachfrage erzeugen kann, um Kernentwickler davon zu überzeugen, den kostenlosen Brief qfür die Aufgabe zuzuweisen . Vielleicht eine allgemeine Option für die gesamte \dBefehlsfamilie, um eine bloße Liste verketteter Namen anzuzeigen? Wie \d- tbl(Mnemonik: das Gegenteil von \d+, das mehr Details zeigt ). Dies würde es ermöglichen, grundsätzlich jede bloße Liste von Objekten zu erhalten. Tabellen in einem Schema : \dt- public.*, Funktionen, die mit "f_foo" beginnen: \df- f_foo*usw. - oder Spalten in einer Tabelle : \d- mytbl. Ähnlich wie der Shell-Befehl ls...
Erwin Brandstetter
Ich gebe dir das Kopfgeld. Aber etwas in psql eingebautes wäre wirklich eine nette Funktion. Danke Erwin :-)
guettli
0

Ich glaube, ich habe gefunden, wonach Sie suchen, aber ich habe es nicht selbst getestet.

Es gibt eine Software namens SequelPro, mit der Sie die Felder aus einer bestimmten Tabelle auswählen können, die jedoch nur für MySQL gilt. Bitte lesen Sie von unten irgendwo in der Mitte der Seite:

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

Es gibt eine andere Software namens PSequel, die nur auf Mac läuft und behauptet, sie sei vom Typ SequelPro, der für Postgres entwickelt wurde:

http://www.psequel.com/

Hoffe das hilft.

Ungebunden
quelle