2017-04-24 204 views
0

有一个表像以下:Postgres的:在阵列型的JSON字段设置唯一索引

CREATE TABLE test (my_field jsonb NOT NULL) 

my_field具有像collection其存储在varchar[]格式值的键:

{my_field: {collection: ['a', 'b', 'c']}} 

我知道可以为简单的json值设置唯一的索引。例如,对于{my_field: {name: 'Someone'}},可以设置唯一约束。 (已经试过了)

我已经尝试过exclude using gist很多,但到目前为止我一无所获。

在这种情况下可以设置唯一的(考虑重叠)约束吗?

在此先感谢。

+0

你想有一个英国OFR阵列..下令或不.. [ '一', 'B'] <> [? 'b','a']?.. –

+0

这不是订货的问题,唯一性是我在寻找的东西。 – Kaveh

回答

0

如果没有关系,然后订购的简单指标将工作:

so=# CREATE TABLE test (my_field jsonb NOT NULL); 
CREATE TABLE 
so=# insert into test select '{"my_field": {"collection": ["a", "b", "c"]}}'; 
INSERT 0 1 
so=# create unique index uk_c on test ((my_field->'my_field'->>'collection')); 
CREATE INDEX 
so=# insert into test select '{"my_field": {"collection": ["a", "b", "c"]}}'; 
ERROR: duplicate key value violates unique constraint "uk_c" 
DETAIL: Key (((my_field -> 'my_field'::text) ->> 'collection'::text))=(["a", "b", "c"]) already exists. 
+0

如果我只插入[“a”,“b”]会怎么样? – Kaveh

+0

我需要重叠的东西(&&)。我很感谢你关心的人。 – Kaveh