【发布时间】:2021-02-12 06:04:47
【问题描述】:
作为我的 PostgreSQL DB 中架构的一部分,当前运行版本 11,但如果它解除阻塞,我愿意升级:我有一个 jsonb 列 data,其中包含跨行的各种结构的嵌套对象,我不这样做'无法控制。例如:
第 1 行可能是:{'rootProperty': { 'nestedProperty': 'someStrVal' }}
第 2 行可能有类似的架构:{'rootProperty': { 'nestedProperty': 2, 'otherNestedProperty': 'someOtherString' }}
我的困难在于尝试根据 jsonb 列中的属性查询行/行子集,该属性跨行具有不同的类型。在此示例中,nestedProperty 是第 1 行中的字符串和第 2 行中的 int。
当我尝试运行诸如
之类的查询时SELECT * FROM TABLE WHERE data -> 'rootProperty' ->> 'nestedProperty' = 'someStrVal'
一切正常,但如果我尝试
SELECT * FROM TABLE WHERE data -> 'rootProperty' ->> 'nestedProperty' > 1
或
SELECT * FROM TABLE WHERE (data -> 'rootProperty' ->> 'nestedProperty')::int > 1
查询出错,分别出现“运算符不存在:文本 > 整数”和“整数的无效输入语法:“someStrVal””。
有没有一种方法可以让 jsonb 列具有可变模式,这些模式可能具有重叠的结构,尽管具有不同的数据类型,并且仍然可以查询它们?我不介意必须指定我要查找的类型,只要它可以跳过或绕过不符合该类型条件的行即可。
【问题讨论】:
-
这取决于你的 PostgreSQL 版本
-
@LaurenzAlbe 服务器当前正在运行 PostgreSQL 11。但如果它启用,我愿意更新到 12 或 13。将更新帖子以反映
标签: postgresql jsonb querying