【发布时间】:2021-09-23 11:05:45
【问题描述】:
我正在寻找一种方法来创建一个约束来验证 JSONB 列中的值是唯一的,但是我需要它们在不考虑顺序的情况下进行比较时也是唯一的,因此 JSONB 比较/散列对这种情况。
为了检查 2 个 JSONB 对象是否相等,我检查它们是否相互包含
select t.a @> t.b and t.a <@ t.b
from (
SELECT
'{"foo": 42, "bar": ["value", 5]}'::jsonb as a,
'{"bar": [5, "value"], "foo": 42}'::jsonb as b
) as t
具体来说,我正在寻找一个 SQLAlchemy 解决方案,但原始的 postgresql 解决方案可能会有很大帮助。
【问题讨论】:
-
JSON 总是一个字符串数组吗?
-
@LaurenzAlbe 否 - 固定示例
-
foo和bar会自动重新排序,但我怀疑有没有好的解决方案。 -
@LaurenzAlbe 键会自动重新排序,但列表不会?有没有办法在插入时自动重新排序列表?我不需要维护原始排序,但我也不想在应用程序代码中排序
-
我觉得不错。
标签: python json postgresql sqlalchemy jsonb