【发布时间】:2014-11-15 12:57:11
【问题描述】:
我现在正在测试 Postgresql 9.4 beta2。我想知道是否可以在嵌入式 json 对象上创建唯一索引?
我创建一个表名products:
CREATE TABLE products (oid serial primary key, data jsonb)
现在,我尝试将 json 对象插入数据列。
{
"id": "12345",
"bags": [
{
"sku": "abc123",
"price": 0,
},
{
"sku": "abc123",
"price": 0,
}
]
}
但是,我希望 sku 的包包是独一无二的。这意味着无法将 json 插入到产品表中,因为 sku 在这种情况下不是唯一的。
我尝试创建如下所示的唯一索引,但失败了。
CREATE UNIQUE INDEX product_sku_index ON products( (data->'bags'->'sku') )
有什么建议吗?
【问题讨论】:
-
唯一索引在这里不起作用,因为只有一个值。您不能将多个条目添加到单行的索引中。为此,您需要一个
check约束 - 但它只能在单行上运行。没有简单的方法可以说“我希望这个子字段在所有行中的所有 json 对象中都是唯一的”。 -
请不要将
oid用于您自己的列。这是 Postgres 使用的内部名称,会引起很多混乱(如果不是问题) -
我想我必须改变我的设计。谢谢你帮助我。
标签: json postgresql indexing unique-index postgresql-9.4