Postgres 9.6 - 为json数组创建唯一索引

时间:2017-04-05 00:51:11

标签: postgresql jsonb gin

“燮,

我们有一个Postgres(9.6)表格myTable,其中包含data jsonb NOT NULL行:

DROP TABLE myTable;
CREATE TABLE myTable (data jsonb NOT NULL);

我们希望存储包含电子邮件地址数组的对象:

INSERT INTO myTable (data) VALUES ($${"email": [{"address": "A"}, {"address": "B"}]}$$);
INSERT INTO myTable (data) VALUES ($${"email": [{"address": "C"}]}$$);

我们想在address上创建一个唯一索引,以防止插入行:

-- "A" NON UNIQUE, SHOULD FAIL
INSERT INTO myTable (data) VALUES ($${"email": [{"address": "A"}]}$$);

-- "C" NON UNIQUE, SHOULD FAIL
INSERT INTO myTable (data) VALUES ($${"email": [{"address": "C"}, {"address": "D"}]}$$);

我们尝试使用:

-- THROW: "ERROR:  index expression cannot return a set"
CREATE UNIQUE INDEX my_index ON myTable(((jsonb_array_elements((data->>'email')::jsonb)->>'address')));

我们正在寻找使用索引或约束的解决方案,没有额外的表,也没有视图和触发器。任何评论或想法将不胜感激。

干杯,

0 个答案:

没有答案