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

Postgres trigger function if statement on jsonb array

如果用户具有特定角色,我正在尝试插入另一个 table。角色当前作为 json 数组 [{'type': 'ADMIN'}]

存储在用户对象中

我的代码如下

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

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

因为roles是一个数组,所以需要测试一个数组元素:

IF NEW.roles @> '[{"type": "ADMIN"}]'

或者,如果您知道数组只包含一个元素,您可以通过索引访问该值:

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