“燮,
我们有一个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')));
我们正在寻找使用索引或约束的解决方案,没有额外的表,也没有视图和触发器。任何评论或想法将不胜感激。
干杯,