我有一个具有以下架构的表:
CREATE TABLE tbl_name (
id bigserial primary key,
phone_info json
);
phone_info 列的示例 json 数据如下所示。
{
"STATUS":{"1010101010":"1","2020202020":"1"},
"1010101010":"OK",
"2020202020":"OK"
}
现在我需要在 phone_info 列上添加一个检查约束,以便“STATUS”的所有键,即(1010101010,2020202020)应该作为 phone_info 列的(键,值)对存在,其中值将是“OK”。因此,上面的示例数据将满足检查约束,因为 phone_info 列中存在以下键值对。
"1010101010":"OK"
"2020202020,":"OK"
我尝试了以下解决方案,但这没有奏效,因为检查约束不支持 array_agg 函数。
ALTER TABLE tbl_name
ADD CONSTRAINT validate_info CHECK ('OK' = ALL(array_agg(phone_info->json_object_keys(phone_info->'STATUS'))) );
有人可以帮我吗,我可以编写一个 SQL 函数并在检查约束中使用该函数吗?