Скажем, у меня есть таблица, как:
CREATE TABLE test (id SERIAL, first VARCHAR(10), second VARCHAR(10), other VARCHAR(10));
CREATE UNIQUE INDEX unique_index ON test (first, second);
INSERT INTO test (first, second, other)
VALUES ('lorem', null, 'old');
Если я заполню этот столбец и у второго поля в индексе будет ноль, но что делать в конфликтах, где ноль = ноль, как я могу это сделать? В настоящее время у меня нет конфликта, когда значение upsert также нулевое.
INSERT INTO test (first, second, other)
VALUES ('lorem', null, 'new')
ON CONFLICT (first, second)
DO UPDATE SET
other = EXCLUDED.other;
Я получу вывод примерно так:
1 lorem (null) old
2 lorem (null) new
Это работает, если я установлю во втором столбце какое-либо значение, но при нулевом значении конфликта нет. Зачем? И как я могу это исправить?