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

Wie greife ich mit der PostgreSQL C-Bibliothek (libpq) auf eine HSTORE-Spalte zu?

libpqtypes scheint etwas Unterstützung für hstore zu haben .

Eine andere Möglichkeit besteht darin, die direkte Interaktion mit hstore zu vermeiden in deinem Code. Sie können trotzdem in der Datenbank davon profitieren, ohne sich mit der Textdarstellung auf der Client-Seite zu befassen. Angenommen, Sie möchten ein hstore-Feld abrufen. Sie verwenden einfach:

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

oder auf alten PostgreSQL-Versionen können Sie die skurrile und nicht standardmäßige set-returning-function-in-SELECT-Form verwenden:

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

(Aber seien Sie vorsichtig, wenn Sie mehrere Datensätze aus t auswählen Auf diese Weise erhalten Sie seltsame Ergebnisse, während LATERAL wird gut).

Eine weitere Option ist die Verwendung von hstore_to_array oder hstore_to_matrix bei Abfragen, wenn Sie mit der PostgreSQL-Array-Darstellung vertraut sind.

Um hstore-Werte zu erstellen, können Sie die hstore-Konstruktoren verwenden, die Arrays verwenden. Diese Arrays können wiederum mit array_agg erstellt werden über einen VALUES -Klausel, wenn Sie sich nicht mit der Array-Darstellung von PostgreSQL in Ihrem Code befassen möchten.

All dieses Durcheinander sollte in Zukunft verschwinden, da PostgreSQL 9.4 wahrscheinlich eine viel bessere Zusammenarbeit zwischen hstore- und json-Typen bietet, sodass Sie bei der Interaktion mit hstore einfach die json-Darstellung verwenden können.