排除约束和唯一约束有区别吗?

Fra*_*hey 5 postgresql unique-constraint

假设如下表:

CREATE TABLE zoo (
    cage   INTEGER,
    animal TEXT,
);
Run Code Online (Sandbox Code Playgroud)

以下之间是否存在真正有效的区别:

ALTER TABLE zoo ADD CONSTRAINT x EXCLUDE USING gist (cage WITH =, animal WITH =)
Run Code Online (Sandbox Code Playgroud)

和:

CREATE UNIQUE INDEX ON zoo(cage, animal)
Run Code Online (Sandbox Code Playgroud)

Fra*_*hey 9

我在排除约束的作者的博客上读到了这篇文章:

\n

排除约束是通用的 SQL UNIQUE

\n
DROP TABLE IF EXISTS a;\nCREATE TABLE a(i int);\nALTER TABLE a ADD EXCLUDE (i WITH =);\n
Run Code Online (Sandbox Code Playgroud)\n

这与 ai 上的 UNIQUE 约束相同,只是它使用排除约束机制;它甚至使用普通的 BTree 来强制执行。由于对 UNIQUE 约束进行了一些微优化,性能会稍微差一些,但只是轻微优化,并且性能特征应该是相同的(it\xe2\x80\x99s 一样可扩展)。最重要的是,它在高并发下的行为与 UNIQUE 约束相同,因此您不必担心过度锁定。如果一个人插入5,会阻止其他事务同时插入5,但不会干扰插入6的事务。

\n

这或多或少回答了这个问题。

\n