sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur får man tillgång till en HSTORE-kolumn med PostgreSQL C-bibliotek (libpq)?

libpqtypes verkar ha visst stöd för hstore .

Ett annat alternativ är att undvika direkt interaktion med hstore i din kod. Du kan fortfarande dra nytta av det i databasen utan att ta itu med dess textrepresentation på klientsidan. Säg att du vill hämta ett hstorefält; du använder bara:

SELECT t.id, k, v FROM thetable t, LATERAL each(t.hstorefield);

eller på gamla PostgreSQL-versioner kan du använda det knäppa och icke-standardiserade set-returning-function-in-SELECT-formuläret:

SELECT t.id, each(t.hstorefield) FROM thetable t;

(men se upp om du väljer flera poster från t på så sätt får du konstiga resultat medan LATERAL kommer att gå bra).

Ett annat alternativ är att använda hstore_to_array eller hstore_to_matrix när du frågar, om du är bekväm med att hantera PostgreSQL-arrayrepresentation.

För att skapa hstore-värden kan du använda hstore-konstruktörerna som tar arrayer. Dessa arrayer kan i sin tur skapas med array_agg över en VALUES om du inte vill hantera PostgreSQL:s arrayrepresentation i din kod.

All denna röra borde försvinna i framtiden, eftersom PostgreSQL 9.4 sannolikt kommer att ha mycket bättre samverkan mellan hstore- och json-typerna, vilket gör att du bara kan använda json-representationen när du interagerar med hstore.




  1. Avancerad SQL:Variationer och olika användningsfall av T-SQL Insert Statement

  2. Procedurer för Oracle i php med PDO

  3. Kan användning av en IP-adresskänslig vyräknare bära för mycket arbetsbelastning för MYSQL/PHP?

  4. SQL Server 2016:Skapa en vy