空でないJSONオブジェクトのみを許可するJSONB列にCHECK制約を設定したい(属性のみ、またはJSONプリミティブ{}
のような他の値は許可しない)。[]
「ルート」値のみを確認したいのですが、これらのオブジェクトに何が格納されているかは問題ではありません。
どうやってやるの?
空でないJSONオブジェクトのみを許可するJSONB列にCHECK制約を設定したい(属性のみ、または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