【发布时间】:2019-10-16 07:07:15
【问题描述】:
我试图弄清楚如何在 Postgres 中向包含 JSON 对象的表添加约束。我希望该约束确保 jpg 将具有非 null md5 属性。
我试图检查子数组,但无法让它在数组上工作。如果使用取消引用箭头运算符(table->'jpg'->0 ?'md5'),我可以测试该属性。我也尝试过使用 jsonb_array_elements() 函数,但它不允许在约束语句中使用。
例如:
{
jpg: [
{
md5: "some md5",
...
}
]
}
我会用这个:
ALTER TABLE table ADD CONSTRAINT md5_is_defined CHECK(table->'jpg'->0 ? 'md5')
但我不想只检查第一个插入的元素
我想知道在这个检查语句中使用 jsonb_array_elements 是否有一些技巧。是的,我意识到我应该标准化我的数据。我试图这样做,但为它编写语句变成了一个怪物。
【问题讨论】:
-
"我尝试过这样做,但是为它编写语句变成了一个怪物" 所以你更喜欢编写每次需要时取消嵌套和重新聚合数组的怪物更改该数组中的单个项目?为什么 md5 还是在数组中?您是否希望每个 jpg 有多个 md5 值?
-
这只是一个随意的例子。我没有使用这种数据结构。我正在使用一个具有许多可选字段(30+?)和更多其他字段的字段,在我有限的经验中,它变得非常头疼。我宁愿这样做,因为数据库大小会很小并且性能并不重要。这是一个主要用于学习的爱好项目。
标签: arrays postgresql constraints jsonb