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