Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql jsonb数组上的Postgres触发器函数if语句_Postgresql_If Statement_Jsonb - Fatal编程技术网

Postgresql jsonb数组上的Postgres触发器函数if语句

Postgresql jsonb数组上的Postgres触发器函数if语句,postgresql,if-statement,jsonb,Postgresql,If Statement,Jsonb,如果用户具有特定角色,我将尝试插入另一个表中。角色当前以json数组的形式存储在用户对象上[{'type':'ADMIN'}] 我的代码如下 BEGIN IF NEW.roles->'type' @> '"ADMIN"' THEN // INSERT INTO new_table END IF; RETURN NEW; END; 如果角色存在,则永远不会插入该行。有没有办法在jsonb上执行IF语句?由于角色是一个数组,您

如果用户具有特定角色,我将尝试插入另一个表中。角色当前以json数组的形式存储在用户对象上
[{'type':'ADMIN'}]

我的代码如下

BEGIN
    IF NEW.roles->'type' @> '"ADMIN"' THEN
        // INSERT INTO new_table
    END IF;
    RETURN NEW;
END;

如果角色存在,则永远不会插入该行。有没有办法在jsonb上执行IF语句?

由于
角色
是一个数组,您需要测试数组元素:

IF NEW.roles @> '[{"type": "ADMIN"}]'
或者,如果知道数组仅包含单个元素,则可以通过索引访问值:

IF NEW.roles -> 0 ->> 'type' = 'ADMIN'