我拥有的是 Postgresql 中的一个文本列,我想将其转换为 JSONB 列。
我试过的是这样的:
CREATE TABLE test (id serial, sec text, name text);
INSERT INTO test (id, sec, name) VALUES (1,'{"gender":"male","sections":{"a":1,"b":2}}','subject');
ALTER TABLE test ALTER COLUMN sec TYPE JSONB USING sec::JSONB;
这确实将 text 列转换为
jsonb
。但是,如果我尝试查询:
SELECT sec->>'sections'->>'a' FROM test
我收到一个错误。
我看到转换仅在一个级别完成(即:sec->>'sections' 工作正常)。
查询
SELECT pg_typeof(name->>'sections') from test;
给我列类型作为文本。有没有办法可以将文本完全转换为 jsonb,以便我可以成功查询
SELECT sec->>'sections'->>'a' FROM test;
?我不想在如下查询中将文本转换为 json,因为我稍后需要在 'a' 上创建索引。
select (sec->>'sections')::json->>'a' from test;
最佳答案
操作符 ->>
作为结果给出一个文本。如果需要 ->
,请使用 jsonb
:
select
pg_typeof(sec->>'sections') a,
pg_typeof(sec->'sections') b
from test;
a | b
------+-------
text | jsonb
(1 row)
用:
select sec->'sections'->>'a'
from test;
关于json - 如何将文本完全转换为 jsonb 以用于 postgresql 列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38436178/