我想对 JSONB 列有一个 CHECK 约束,它只允许非空 JSON 对象(仅{}
具有属性,没有其他值,如[]
JSON 原语)。
我只想检查“根”值,这些对象中存储的内容并不重要。
我怎样才能做到这一点?
我想对 JSONB 列有一个 CHECK 约束,它只允许非空 JSON 对象(仅{}
具有属性,没有其他值,如[]
JSON 原语)。
我只想检查“根”值,这些对象中存储的内容并不重要。
我怎样才能做到这一点?
CHECK(jsonb_typeof(foo)='object' AND foo <> '{}'::JSONB)
就像任何检查约束一样并使用 <> 运算符。从手册:
表 9-1 中显示的标准比较运算符可用于 jsonb,但不适用于 json。
表 9.1 显示了不等于运算符 <>:
create table foo(
bar jsonb,
constraint baz check(bar <> '{}'::jsonb)
);
insert into foo(bar) values('{"foo": 1}'::jsonb);
insert into foo(bar) values('{}'::jsonb); -- fails