Postgresql:同一高级键中的唯一值,但直接子键不同

Postgresql:同一高级键中的唯一值,但直接子键不同,postgresql,unique,multiple-columns,Postgresql,Unique,Multiple Columns,我有一张这样的桌子: 创建表(如果不存在) (键1)整数 ,键2整数 ,data varchar(8) ,约束cst_tt_键1_键2唯一(键1,键2) ); 创建索引idx\u tt\u数据\u三角图 关于数据 使用gist(数据gist\u trgm\u ops); 我希望在相同的key1值下有唯一的data 按照顺序,可以进行以下记录 1, 1, "Postgres" 2, 1, "Postgres" 但是,以下记录是不允许的 1, 1, "Postgres" 1, 2,

我有一张这样的桌子:

创建表(如果不存在)
(键1)整数
,键2整数
,data varchar(8)
,约束cst_tt_键1_键2唯一(键1,键2)
);
创建索引idx\u tt\u数据\u三角图
关于数据
使用gist(数据gist\u trgm\u ops);
我希望在相同的
key1
值下有唯一的
data

按照顺序,可以进行以下记录

1,  1,  "Postgres"
2,  1,  "Postgres"
但是,以下记录是不允许的

1,  1,  "Postgres"
1,  2,  "Postgres"

您知道如何使用
检查
约束

只需创建一个唯一的索引即可

create unique index on tt(key1, data)

在tt上创建唯一索引(键2,数据)
?唯一约束和唯一索引本质上是一样的(约束是由唯一索引强制执行的)。我甚至不确定这是否正是问题所在,数据集太小,很难准确说出他想要什么。我同意你的建议(我自己做了评论)。我只是不同意你的措辞“不需要约束——只需要索引”——两者最终都会做同样的事情。他/她只需要添加另一个独特的“约束”。无法判断
key1,key
上的键是否必要。