2016-06-19 5 views
0

Wenn ich die PostgreSQL 9.5 hstore() Konstruktion Funktion auf einem row Objekt in einer Abfrage verwenden, scheint es nur Spalten in dieser Zeile, die die text oder integer Datentypen sind. Ich kann sehen, dass meine Spalten timestamp und character varying standardmäßig aus dem HSTORE-Objekt weggelassen werden, das zurückkommt.Funktioniert die HSTORE() -Funktion von Postgres nur mit text/integer-Datentypen in 9.5?

In PostgreSQL 9.3 Aufbau eines hstore Objekts würde timestamp und character varying Spalten der Zeile auch enthalten, wie kann ich dieses Verhalten zurück erhalten?

Insbesondere DDL meine Tisch wie folgt aussieht:

CREATE TABLE public.sessions 
(
    id integer NOT NULL DEFAULT nextval('sessions_id_seq'::regclass), 
    session_id character varying(255) NOT NULL, 
    data text, 
    created_at timestamp without time zone, 
    updated_at timestamp without time zone, 
    CONSTRAINT sessions_pkey PRIMARY KEY (id) 
) 
WITH (
    OIDS=FALSE 
); 

Unterhalb der Ausgang ist ein hstore Konstruktor ausgeführt wird; beachten Sie, dass die session_id, created_at und updated_at Spalten (Schlüssel) nicht zum hstore auch hinzugefügt werden, wenn ihre Werte nicht null sind:

select hstore(sessions.*) from sessions limit 1; 

hstore                  
--------------------------------------------------------------- 
"id"=>"15435216", "data"=>"DjfBv=" 
(1 row) 

Antwort

0

Nr Alle Spalten enthalten sein sollten. Auch mit NULL-Werten. (Ich habe gerade getestet, um zu verifizieren.)

Vielleicht verwenden Sie versehentlich eine andere Tabelle mit demselben Namen in einem anderen Schema?
Abgesehen: Sie können (äquivalent) vereinfachen:

SELECT hstore(sessions) FROM public.sessions LIMIT 1; 

I Schema qualifizierte public.sessions um sicherzustellen, dass die richtige Tabelle verwendet wird.
Ich nehme an, Sie sind sich der Rolle des Schemasuchpfads bewusst?

+0

Hmm das Schema mit 'public.sessions' Qualifying tat es nicht reparieren, obwohl guter Gedanke. Ich bin relativ positiv, es ist die einzige "Sitzung" Tabelle in dieser Datenbank geschweige denn Schema. Vielleicht ist ein Problem mit dem Betriebssystem/Verteilung von Postgres ich benutze. Ich habe bestätigt, dass es perfekt auf meiner Ubuntu-Installation von 9.3 funktioniert (mit 'postgresql-contrib-9.3' installiert von apt-get für das hstore-Modul), während das problematische über das MSI-Installationsprogramm unter Windows 10 installiert wurde und eine Version von 9.5.3. – depthfirstdesigner

+0

@nomizzz: Nun, es muss * einige * Erklärungen geben, aber ich sehe nicht, wie das den Unterschied machen würde. Ich habe 9.5.3 unter Windows 7 getestet und es funktioniert wie erwartet. –

+0

Einverstanden - jetzt, da ich weiß, dass dies das erwartete Verhalten auf 9.5 ist, ist es wahrscheinlich, dass einige Konfigurationseinstellungen oder Bereichsdefinitionen in den Standardeinstellungen, die mir fehlen, anders sind. Ich melde mich zurück, wenn ich es herausgefunden habe. – depthfirstdesigner

Verwandte Themen