PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wählen Sie den Spaltennamen und den Wert aus der Tabelle aus

Natürlich könnten Sie eine PL/pgSQL-Funktion schreiben und die Katalogtabelle abfragen pg_attribute dich selbst. Aber es ist so viel einfacher mit einem der folgenden:

JSON

Die Funktion row_to_json() bietet Funktionalität, die den halben Weg geht. Eingeführt mit Postgres 9.2 :

SELECT row_to_json(t, TRUE) FROM tbl t;

Sie müssen die Spaltennamen überhaupt nicht angeben, die Funktion leitet sie vom Tabellentyp ab.

->SQLfiddle-Demo.

Sie benötigen jedoch json_each_text() von Postgres 9.3 den ganzen Weg gehen:

SELECT json_each_text(row_to_json(t)) FROM tbl t;

So erhalten Sie eine Sortierreihenfolge wie Sie anzeigen:

SELECT (json_each_text(row_to_json(t))).*
FROM   tbl t
ORDER  BY 1, 2;

(Es ist unklar, wie Sie genau sortieren möchten.)
Ungetestet. SQLfiddle stellt Postgres 9.3 noch nicht bereit.

hstore

Sie können jedoch dasselbe mit dem Zusatzmodul tun hstore . Verfügbar seit 8.4 . Einmal installieren mit:

CREATE EXTENSION hstore;

Details:
Schlüssel-Wert-Paar in PostgreSQL

Abfrage:

SELECT (each(hstore(t))).*
FROM   tbl t
ORDER  BY 1,2;

Das war's.
Nochmal kein SQLfiddle, da man dort keine zusätzlichen Module installieren kann.