Kann jemand sehen verwenden, warum dies nicht funktioniert? Nach section 9.15 des Handbuchs sollte die ->
Operator-Elemente eines Typs JSON-Daten zugreifen. Es scheint mir, wie, obwohl das Info-Schema sagt der Spalte Typ ‚json‘ ist es noch wirklich ein Skalar StringWie JSON Operatoren auf JSON typisierte Spalte in postgresql 9.3
postgres=# create table jtest (id serial, data json);
CREATE TABLE
postgres=# select column_name, data_type from information_schema.columns where table_name = 'jtest';
column_name | data_type
-------------+-----------
id | integer
data | json
(2 rows)
postgres=# insert into jtest (data) values (to_json('{"k1": 1, "k2": "two"}'::text));
INSERT 0 1
postgres=# select * from jtest;
id | data
----+--------------------------------
1 | "{\"k1\": 1, \"k2\": \"two\"}"
(1 row)
postgres=# select data->'k1' from jtest;
ERROR: cannot extract element from a scalar
postgres=# select data::json->'k1' from jtest;
ERROR: cannot extract element from a scalar
postgres=# \q
$ pg_ctl --version
pg_ctl (PostgreSQL) 9.3beta2
Update (die Anführungszeichen beachten, wenn es angezeigt wird.):
I diese beiden Beiträge here und here gefunden, die es zeigen sollte genau arbeiten, wie ich tue. Nur um sicherzugehen ich dies versucht:
postgres=# select * from jtest where data ->> 'k2' = 'two';
ERROR: cannot extract element from a scalar
Gibt es eine Build-Option oder contrib Modul Ich brauche JSON-Funktionalität zu bekommen?
Danke für den Beitrag; hatte auch das gleiche Problem mit to_json zu konvertieren in eine JSON-Spalte. Ich ging zurück und benutzte CAST (field_name als json) und alles funktionierte wie erwartet. –