Postgres搜索JSON通过动态值

发布于 2025-02-06 02:09:50 字数 709 浏览 3 评论 0 原文

在Postgres 14中,我正在尝试查询一个JSON数组元素:

{
  "haystack": [
    { "search": "findthis" },
    { "search": "someothervalue" }
  ]
}

此操作:

SELECT 1
FROM test
WHERE data->'haystack' @> '[{"search":"findthis"}]';

但是,当“ findthis”来自函数时: getText()或其他一些动态值,我得到0个结果:

SELECT 1
      FROM test
      WHERE data->'haystack' @> to_jsonb('[{"search":"' || getText()::text || '"}]');

(我希望能返回1)

我的测试:

我缺少什么?

In Postgres 14, I'm trying to query a JSON array element:

{
  "haystack": [
    { "search": "findthis" },
    { "search": "someothervalue" }
  ]
}

This works:

SELECT 1
FROM test
WHERE data->'haystack' @> '[{"search":"findthis"}]';

However, when "findthis" comes from a function: getText() or some other dynamic value, I get 0 results:

SELECT 1
      FROM test
      WHERE data->'haystack' @> to_jsonb('[{"search":"' || getText()::text || '"}]');

(I am expecting to return 1)

My test:

https://dbfiddle.uk/?rdbms=postgres_14&fiddle=ed2615fe9be7a5b0284065f49fddd36f

What am I missing?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

把回忆走一遍 2025-02-13 02:09:51

使用 JSONB ,而不是 to_jsonb

select to_jsonb('[{"search":"' || 'findthis' || '"}]'), jsonb('[{"search":"' || 'findthis' || '"}]')

和您的查询类型cast

SELECT 1
      FROM test
      WHERE data->'haystack' @> ('[{"search":"' || 'findthis' || '"}]')::jsonb;

Use jsonb, not to_jsonb

select to_jsonb('[{"search":"' || 'findthis' || '"}]'), jsonb('[{"search":"' || 'findthis' || '"}]')

and your query with type cast

SELECT 1
      FROM test
      WHERE data->'haystack' @> ('[{"search":"' || 'findthis' || '"}]')::jsonb;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文