PostgreSQL:非空 JSON 对象的 CHECK 约束

PostgreSQL: CHECK constraint for non-empty JSON objects

我想在 JSONB 列上设置 CHECK 约束,该列只允许非空 JSON 对象(只有 {} 具有属性,没有其他值,例如 [] 或 JSON 个原语)。

我只想检查 "root" 值,这些对象中存储的内容无关紧要。

我该怎么做?

就像任何检查约束一样,使用 <> 运算符。来自 manual:

The standard comparison operators shown in Table 9-1 are available for jsonb, but not for json.

并且 table 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
CHECK(jsonb_typeof(foo)='object' AND foo <> '{}'::JSONB)