Czy ktoś może zrozumieć, dlaczego to nie działa? Zgodnie z section 9.15 instrukcji operator ->
powinien uzyskać dostęp do elementów typu danych JSON. Wygląda mi na to, chociaż schemat informacji mówi, że kolumna jest typu „json” nadal jest naprawdę skalarne ciągJak korzystać z operatorów JSON na kolumnie z wpisanymi JSON w 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 (zauważ cytaty, gdy jest on wyświetlany.):
I znalazłem te dwa posty here i here, które wskazują, że powinien działać dokładnie tak jak ja. Po prostu na pewno próbowałem to:
postgres=# select * from jtest where data ->> 'k2' = 'two';
ERROR: cannot extract element from a scalar
Czy istnieje opcja kompilacji lub moduł contrib potrzebuję uzyskać funkcjonalność JSON?
Dzięki za posta; również miał ten sam problem z użyciem to_json do konwersji w kolumnę json. Wróciłem i użyłem CAST (field_name jak json) i wszystko działało zgodnie z oczekiwaniami. –