Postgres 跨两列的唯一约束?

gwi*_*rob 2 sql postgresql unique-index unique-constraint

这是我当前的数据库结构:

Col1   Col2
 1    abc123
 1    abc123
 1    def321
 2    xyz789
 2    xyz789
Run Code Online (Sandbox Code Playgroud)

我想确保 中的任何条目Col2仅用于 中的相同条目Col1。例如,数据库允许您添加这一行:

Col1   Col2
 2    lmn456
Run Code Online (Sandbox Code Playgroud)

但不是这个:

Col1   Col2
 2    abc123
Run Code Online (Sandbox Code Playgroud)

有没有办法通过唯一索引来强制执行此操作?通常,唯一性强制特定组合对于整个表来说是唯一的(即(1,abc123)仅出现一次)。

我无法移动Col2到不同的表并使用联接,因为我需要支持Col2每个条目的多个值Col1- 它不是一对一的。

Gor*_*off 5

不,您的数据结构错误。

您应该将每个和存储col2在一个单独的表中。然后您可以使用 查找该值。col1col2join