给定 Postgres 数据库中的以下三列:第一、第二、第三;我怎样才能创建一个约束,使排列是唯一的?
例如如果数据库中存在 ('foo', 'bar', 'shiz')
,则 ('bar', 'shiz', 'foo')
将被排除为非唯一。
最佳答案
您可以使用 hstore 创建唯一索引:
CREATE UNIQUE INDEX hidx ON test USING BTREE (hstore(ARRAY[a,b,c], ARRAY[a,b,c]));
更新
其实
CREATE UNIQUE INDEX hidx ON test USING BTREE (hstore(ARRAY[a,b,c], ARRAY[null,null,null]));
可能是个更好的主意,因为它的工作原理相同,但占用的空间更少 ( fiddle )。
关于sql - 跨多列排列的唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18360173/