首页 > 解决方案 > Postgres 从表中选择行,其中 JSONB 数组中的变量

问题描述

我试图在我的数据库中获取行,其中每行都包含 JSONB 列中的值。到目前为止我所拥有的是

    SELECT *
    FROM users
    WHERE roles @> '[{"type": $2 }]'

Roles 是一个 JSONB 数组,可以有大约 5 个值。

获得具有“管理员”角色的用户的最简单方法是什么。Postgres 不喜欢 $2,我可以轻松地修改查询并将值作为字符串插入,但不想增加 SQL 注入攻击的机会。

标签: sqlarraysjsonpostgresqlwhere-clause

解决方案


您可以使用 jsonb 构建器函数来生成正确的 jsonb 数组;这允许正确传递参数:

select *
from users
where roles @> jsonb_build_array(jsonb_build_object('type', $2))

推荐阅读