你可以在postgres jsonb字段中存储数字,布尔等吗?

时间:2015-11-06 15:47:01

标签: json postgresql casting type-conversion

我的数据模型中有一个字段几乎可以是任何字段:数字,字符串,bool或复杂对象。

我可以将它作为jsonb存储在postgres中吗?

id | response (jsonb)
------------
1  | "hello"
2  | 3
3  | { "firstName": "bob", "lastName" : "wilson" }
4  | True

当我尝试将数字json值保存到该列时,我当前收到此错误:

column "response" is of type jsonb but expression is of type text

只有将它保存在对象结构中才有可能吗?

{ "value" : "hello" }
{ "value" : 3 }
{ "value" : ... }

如果可行的话,我宁愿以第一种方式去做。

2 个答案:

答案 0 :(得分:0)

事实证明,即使数字,bool和字符串具有有效的JSON表示,JSON标准也要求顶级值是数组或对象。

所以我不应该这样做。相反,我应该将它存储为一个对象。

答案 1 :(得分:0)

drop table if exists t;
create table t (j jsonb);
insert into t (j) values
    (to_json(1)::jsonb),
    (to_json('hello'::text)::jsonb),
    (to_json(true)::jsonb)
;
select * from t;
    j    
---------
 1
 "hello"
 true

请注意,字符串必须在转换为json之前进行转换。