sql >> Databasteknik >  >> RDS >> PostgreSQL

Välj kolumnnamn och värde från tabellen

Naturligtvis kan du skriva en PL/pgSQL-funktion och fråga i katalogtabellen pg_attribute själv. Men det är så mycket enklare med något av följande:

JSON

Funktionen row_to_json() ger funktionalitet som går halva vägen. Introducerad med Postgres 9.2 :

SELECT row_to_json(t, TRUE) FROM tbl t;

Du behöver inte nämna kolumnnamnen alls, funktionen härleder dem från tabelltypen.

->SQLfiddle-demo.

Men du behöver json_each_text() från Postgres 9.3 att gå hela vägen:

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

För att få en sorteringsordning som du visar:

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

(Det är oklart hur du vill sortera exakt.)
Otestad. SQLfiddle tillhandahåller inte Postgres 9.3 ännu.

hstore

Du kan dock göra detsamma med tilläggsmodulen hstore . Tillgänglig sedan 8.4 . Installera den en gång med:

CREATE EXTENSION hstore;

Detaljer:
Nyckelvärdespar i PostgreSQL

Fråga:

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

Det är allt.
Återigen, ingen SQLfiddle, eftersom man inte kan installera ytterligare moduler där.



  1. 2 sätt att ta bort dubbletter av rader i SQLite

  2. Hitta unika poster, sorterade efter fält i samarbete, med PostgreSQL och Rails 3?

  3. SQLite Sum() vs Total():Vad är skillnaden?

  4. Hur man kopierar data från en databas/tabell till en annan databas/tabell