PostgreSQL 是否提供任何符号/方法来施加约束eachJSON 数组的元素?
一个例子:
create table orders(data json);
insert into orders values ('
{
"order_id": 45,
"products": [
{
"product_id": 1,
"name": "Book"
},
{
"product_id": 2,
"name": "Painting"
}
]
}
');
我可以轻松地添加一个约束order_id
field:
alter table orders add check ((data->>'order_id')::integer >= 1);
现在我需要做同样的事情product_id
。我可以对单个数组项施加约束:
alter table orders add check ((data->'products'->0->>'product_id')::integer >= 1);
alter table orders add check ((data->'products'->1->>'product_id')::integer >= 1);
-- etc.
显然我正在寻找某种通配符运算符匹配任何 JSON 数组元素:
alter table orders add check ((data->'products'->*->>'product_id')::integer >= 1);
-- ^ like this
我知道这可以通过将产品提取到单独的products
带有外键的表orders
。但我想知道这在单个 JSON 列中是否可行,因此我可以在设计数据库模式时牢记这一点。