Трюк дня. Частичные ограничения на значения в PostgreSQL. Решение



Для решения данной задачи используем механизм частичных индексов (partial indices).



CREATE TABLE foobar(bar TEXT, bing BOOLEAN);

CREATE UNIQUE INDEX baz_index ON foobar(bar, bing) WHERE bing = 't';

INSERT INTO foobar VALUES('1','t');

INSERT INTO foobar VALUES('2','t');

INSERT INTO foobar VALUES('1','f');

INSERT INTO foobar VALUES('1','f');

INSERT INTO foobar VALUES('1','t');



В результате выполнения последнего INSERT получим следующее сообщение:

ERROR: duplicate key value violates unique constraint «baz_index»



#tips