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)
我想在 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)