我的数据模型中有一个字段几乎可以是任何字段:数字,字符串,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" : ... }
如果可行的话,我宁愿以第一种方式去做。
答案 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之前进行转换。