Проблема обычного сравнения:
NULL <> 'new value'
не возвращает
true. В SQL NULL ломает привычную логику сравнений.Вместо этого можно писать так:
UPDATE users
SET email = :new_email
WHERE id = :id
AND email IS DISTINCT FROM :new_email;
Зачем это нужно:
1. обновляешь строку только если значение реально изменилось
2. корректно работаешь с
NULL3. не плодишь лишние записи в WAL
4. не триггеришь лишние
updated_at, triggers и replication eventsОсобенно полезно в API, где фронт постоянно присылает одни и те же данные.
Маленький оператор, который делает SQL сильно аккуратнее.