4

我想对 JSONB 列有一个 CHECK 约束,它只允许非空 JSON 对象(仅{}具有属性,没有其他值,如[]JSON 原语)。

我只想检查“根”值,这些对象中存储的内容并不重要。

我怎样才能做到这一点?

4

2 回答 2

3
CHECK(jsonb_typeof(foo)='object' AND foo <> '{}'::JSONB)
于 2015-09-17T16:50:20.713 回答
1

就像任何检查约束一样并使用 <> 运算符。从手册

表 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
于 2015-01-08T20:23:02.340 回答