Выражение NEW.id = OLD.id
имеет смысл в предложении WHEN
триггера ( "ID не изменился и не является нулевым" ). Но нет смысла в теле триггера функция , где он сгорает до TRUE
. Кроме того, чтобы повлиять только на строку, которая обновляется, просто используйте триггер BEFORE
вместо:
CREATE OR REPLACE FUNCTION replace_empty_username_with_null()
RETURNS TRIGGER LANGUAGE plpgsql AS
$func$
BEGIN
NEW.username = null; -- !
RETURN NEW;
END
$func$
CREATE TRIGGER replace_empty_username
BEFORE UPDATE OF username ON user_temp -- !
FOR EACH ROW
WHEN (NEW.username = '' AND OLD.id = NEW.id)
EXECUTE PROCEDURE replace_empty_username_with_null();
Связанный: