Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!

Задача: сделать составной уникальный индекс, одно из полей может быть null
Проблема: уникальный индекс не сравнивает null поля
Решение: разбить индекс на 2 разных индекса.
evgenykokovikhin=# create unique index test_unique_idx on test(a, coalesce(b, ''));
CREATE INDEX
evgenykokovikhin=# insert into test (a,b) values ('foo', null);
INSERT 0 1
evgenykokovikhin=# insert into test (a,b) values ('foo', null);
ERROR: duplicate key value violates unique constraint "test_unique_idx"
DETAIL: Key (a, (COALESCE(b, ''::character varying)))=(foo, ) already exists.
CREATE UNIQUE INDEX idx_name_unique ON foobar USING btree ( md5 ( field_one::text || field_two::text ) );DELETE FROM foobar
WHERE id IN
(
SELECT unnest ( ( array_agg ( id ) ) [2:9999999] )
FROM foobar
GROUP BY field_one, field_two
HAVING count ( * ) > 1
);
PostgreSQL: Приемы на продакшене