假设下表:
CREATE TABLE zoo (
cage INTEGER,
animal TEXT,
);
之间存在真正有效的区别:
ALTER TABLE zoo ADD CONSTRAINT x EXCLUDE USING gist (cage WITH =, animal WITH =)
和
CREATE UNIQUE INDEX ON zoo(cage, animal)
答案 0 :(得分:1)
我在排除约束的作者博客上看到了这个:
http://thoughts.davisjeff.com/2010/09/25/exclusion-constraints-are-generalized-sql-unique/
DROP TABLE IF EXISTS a;
CREATE TABLE a(i int);
ALTER TABLE a ADD EXCLUDE (i WITH =);
这与a.i上的UNIQUE约束相同,只是它使用了排除约束机制;它甚至使用普通的BTree来强制执行它。由于UNIQUE约束的一些微优化,性能会稍微差一些,但只是略微,性能特征应该是相同的(它只是可扩展)。最重要的是,它在高并发性下的行为与UNIQUE约束相同,因此您不必担心过度锁定。如果一个人插入5,这将阻止其他事务同时插入5,但不会干扰插入事务6。
这或多或少回答了这个问题。