【问题标题】:How to search in a key/value PostgreSQL json field?如何在键/值 PostgreSQL json 字段中搜索?
【发布时间】:2021-11-01 22:28:14
【问题描述】:

我的 PSQL 数据库中有一个包含这些数据的字段:

{
  "1":{
    "wp_post_id":137840,
    "sync_at":{
      "date":"2021-02-23 22:02:35.958325",
      "timezone_type":3,
      "timezone":"Europe\/Berlin"
    }
  },
  "3":{
    "wp_post_id":773,
    "sync_at":{
      "date":"2021-05-25 16:17:14.322988",
      "timezone_type":3,
      "timezone":"Europe\/Berlin"
    }
  }
}

我尝试搜索sync_at 低于另一个日期的记录但没有成功... 可能我的字段格式不好?!

【问题讨论】:

  • 您想知道是否有任何条目满足条件,还是只想提取 JSON 中匹配的那些部分?
  • 我想知道该字段是否至少有一个条目满足条件(sync_at
  • 看起来您正在将 php datetime 对象按原样转储到 json 中,然后尝试使用 pgsql 进行日期数学运算。如果您存储两个平台都可以理解的东西会更好,例如Unix 时间戳或转换为 utc 的日期时间
  • 使用适当规范化的数据模型会简单得多

标签: sql json postgresql date


【解决方案1】:

最简单的方法是 JSONPATH 查询(自 v12 起可用):

WHERE jsoncol @@ '$.*.sync_at.date < "2020-06-01 00:00:00"'

查询很简单,但没有办法通过索引使其快速。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2021-10-15
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多