Arrays postgres中jsonb数组内的NOTNULL约束

Arrays postgres中jsonb数组内的NOTNULL约束,arrays,postgresql,jsonb,check-constraints,Arrays,Postgresql,Jsonb,Check Constraints,如何在Postgres中的jsonb列中具有NOTNULL约束 我创建了一个Postgres表,其中只有一列名为id,如下所示 create table tablea ( id jsonb, check ((id->>'test1', id->>'test2') != (null, null)) ); 调用者将以以下json格式向表中插入数据:- [ { "test1":"",

如何在Postgres中的jsonb列中具有NOTNULL约束

我创建了一个Postgres表,其中只有一列名为id,如下所示

create table tablea (
  id jsonb, 
  check 
  ((id->>'test1', id->>'test2') != (null, null))
);
调用者将以以下json格式向表中插入数据:-

[
    {
        "test1":"",
        "test2":"",
        "test3":""
    },
    {
        "test1":"",
        "test2":"",
        "test3":""
    }
]
我的目标是,当调用方在id列中插入数据时,我希望键test1和test2不为null。我们如何才能做到这一点。上面解释了我的表创建逻辑。我正在尝试插入数据,如

insert into tablea(id) values 
 ('[{"test1":null,"test2":"a","test3":""}]');

理想情况下,这个insert语句应该抛出错误,但它正在表中插入数据。有人能帮我吗?

您需要创建一个函数,该函数迭代数组并验证每个数组元素

大概是这样的:

创建或替换函数validate_jsonp_input jsonb 返回布尔值 像 $$ 选择不存在选择* 从jsonb_数组_元素SP_输入为远程通信 其中,nullifelement->“test1”为null 或nullifelement->“test2”为空; $$ 语言sql 稳定的 然后可以使用它定义检查约束:

不能将null与=或进行比较。为此,您需要使用IS NOT NULL

您似乎还希望以与null相同的方式处理空字符串

创建表格表格 id jsonb, 约束检查\u json检查验证\u jsonid ;
尝试了这种方法,但查询插入到tableaid值“[{test1:abc,test2:a,test3:}]”中;似乎失败了。它向我显示关系表A的新行违反检查约束表A\u id_check@Abhishek:啊,我没看到你在那里插入数组。这使得支票更加复杂。您使用的是哪个Postgres版本?x86_64-pc-linux-gnu上的PostgreSQL 10.11,由gcc 4.9.3编译,64位