防止重复一组列

Prevent duplication of a set of columns

CREATE TABLE middle_table (
        id SERIAL PRIMARY KEY NOT NULL,
        col_a_id INTEGER NOT NULL REFERENCES table_b (id),
        col_b_id INTEGER NOT NULL REFERENCES table_b (id)
    );

我想防止 col_a_idcol_b_id 重复在一起,以一种有效的方式:

INSERT INTO middle_table VALUES (1,2), (1,3), (2,3);

而这些插入不会无效:

INSERT INTO middle_table VALUES (1,2), (1,2);

有没有一种简单的方法可以做到这一点而无需创建自定义函数等等?

您将使用唯一约束:

CREATE TABLE middle_table (
    id SERIAL PRIMARY KEY NOT NULL,
    col_a_id INTEGER NOT NULL REFERENCES table_b (id),
    col_b_id INTEGER NOT NULL REFERENCES table_b (id),
    UNIQUE (col_a_id, col_b_id)
);