通过在 JSONB 列上应用过滤器来查询 postgresql 中的数据

Yus*_*diq 6 postgresql npgsql cockroachdb

我有一个有 2 列的表;ID (int) and EntityData (JSON)。我在 C# 中以字典的形式创建了一个过滤器对象。我想获取满足过滤器中键值对数据的所有行。

示例过滤器是:

{
    "Name": "mike",
    "Location": "Lagos"
}
Run Code Online (Sandbox Code Playgroud)

这应该获取 EntityData 名称为 mike、位置为 Lagos 的所有行。

Sha*_*sky 14

单个查询可能如下所示:

SELECT * FROM table WHERE json_field->>'Name' = 'mike' AND json_field->>'Location' = 'Lagos'
Run Code Online (Sandbox Code Playgroud)

您可以用参数占位符 ( , ) 替换'mike'和,并对字典的所有条目重复重新运行此查询。为了获得最佳性能,您还可以预先准备命令,甚至可以通过将查询多次连接到同一个.'Lagos'@name@locationCommandText

有关 JSON 运算符的完整 PG 文档,请参阅此处