Я думаю, все, что вам нужно сделать, это 1) убедиться, что это обновление, а не вставка (в противном случае ссылка на old
не имеет никакого смысла, и 2) сравнить с существующей записью. Поскольку имя сотрудника похоже на PK, а последние два поля предназначены только для регистрации изменений, я предполагаю, что вы хотите проверить только зарплату:
-- Who works for us when she must pay for it?
IF NEW.salary < 0 THEN
RAISE EXCEPTION '% cannot have a negative salary', NEW.empname;
elsif TG_OP = 'UPDATE' and new.salary = old.salary then
RAISE EXCEPTION 'salary is already %', NEW.salary;
END IF;
Но, конечно, вы также можете использовать это для любой области. Если вы хотите убедиться, что хотя бы одно изменение изменилось, это было бы примерно так:
elsif TG_OP = 'UPDATE' and
new.salary = old.salary and
new.last_date = old.last_date and
new.last_user = old.last_user then
RAISE EXCEPTION 'Update does not alter any data';
END IF;