There are some problems.
you need a trigger
postgres thows an error when you send your code.
the Syntax can look like you see below
CREATE tABLE erp(myid int , last_update_date timestamp)
CREATE FUNCTION date_change() RETURNS TRIGGER AS $date$
BEGIN
IF (TG_OP = 'UPDATE') THEN
NEW.last_update_date = current_date;
ELSIF (OLD.last_update_date != NEW.last_update_date) THEN
RAISE EXCEPTION 'Error not possible to modify the date';
END IF;
END;
$date$ language 'plpgsql';
CREATE TRIGGER erp_audit
BEFORE UPDATE ON erp
FOR EACH ROW EXECUTE FUNCTION date_change();
db<>fiddle here
As INSTEAD OF TRIGGER, it would look like, but that s for much more extensive functionality
CREATE tABLE erp(myid int , last_update_date timestamp)
CREATE VIEW erp_view AS SELECT * FROM erp;
CREATE FUNCTION date_change() RETURNS TRIGGER AS $date$
BEGIN
IF (TG_OP = 'UPDATE') THEN
NEW.last_update_date = current_date;
ELSIF (OLD.last_update_date != NEW.last_update_date) THEN
RAISE EXCEPTION 'Error not possible to modify the date';
END IF;
END;
$date$ language 'plpgsql';
CREATE TRIGGER emp_audit
INSTEAD OF UPDATE ON erp_view
FOR EACH ROW EXECUTE FUNCTION date_change();
db<>fiddle here