0

有一个如下表:

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了很多,但到目前为止我一无所获。

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

提前致谢。

4

1 回答 1

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.
于 2017-04-24T19:28:41.800 回答