sql - 跨多列排列的唯一约束

标签 sql postgresql database-design constraints unique-constraint

给定 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]));

Fiddle

更新

其实

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/

相关文章:

mysql - 排除工作人员

postgresql - 在更严格的谓词上使用顺序扫描而不是索引扫描

sql - 如果我使用 TEXT 数据类型存储数字会有任何不良影响

sql - 如何知道我有多少条未读的群消息

sql - Postgresql 创建存储数据库链接

php - 如何将多个表链接到一个 ID

sql - 如何识别引用特定表的所有存储过程

sql - PostgreSQL:按记录数对数据进行分组的有效方法

php - 删除php mysql中的前导零

postgresql - Postgres创建扩展命令Docker容器