sql >> Database >  >> RDS >> PostgreSQL

Selecteer kolomnaam en waarde uit tabel

U kunt natuurlijk een PL/pgSQL-functie schrijven en de catalogustabel pg_attribuut jezelf. Maar het is zoveel gemakkelijker met een van de volgende:

JSON

De functie row_to_json () biedt functionaliteit die halverwege gaat. Geïntroduceerd met Postgres 9.2 :

SELECT row_to_json(t, TRUE) FROM tbl t;

Je hoeft de kolomnamen helemaal niet te noemen, de functie leidt ze af van het tabeltype.

->SQLfiddle-demo.

Maar je hebt json_each_text() van Postgres 9,3 om helemaal te gaan:

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

Om een ​​sorteervolgorde te krijgen zoals u laat zien:

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

(Het is niet duidelijk hoe je precies wilt sorteren.)
Niet getest. SQLfiddle biedt nog geen Postgres 9.3.

hstore

U kunt echter hetzelfde doen met de aanvullende module hstore . Beschikbaar sinds 8.4 . Installeer het een keer met:

CREATE EXTENSION hstore;

Details:
Sleutelwaardepaar in PostgreSQL

Vraag:

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

Dat is alles.
Nogmaals, geen SQLfiddle, omdat je daar geen extra modules kunt installeren.



  1. MySQL-concepten:sessie versus verbinding

  2. mySQL init-scripts draaien niet met docker-compose

  3. Booleaanse expressie gebruiken in volgorde van clausule

  4. Hoe voeg ik een primaire sleutel toe aan een Oracle-weergave?