我有一个postgres数据库,还有一个名为product的表。在此表中,我有一个名为auxId的自动增量列(不是表主键)。我想避免对此列进行任何更新。如何使用postgres触发器来避免对auxid进行更新?我尝试过:
#trigger to avoid updates on nameId
CREATE OR REPLACE FUNCTION stop_change_on_auxId()
RETURNS trigger AS
$BODY$
BEGIN
IF NEW.auxId <> OLD.auxId THEN
END IF;
RETURN NEW;
END;
$BODY$
CREATE TRIGGER avoid_auxid_changes
BEFORE UPDATE
ON product
FOR EACH ROW
EXECUTE PROCEDURE stop_change_on_auxId();
但是我相信这将停止整个行的更新。我只需要避免对auxId字段进行更新,但允许对其行进行任何其他更新。
答案 0 :(得分:1)
当然,更改列时会抛出错误:
CREATE FUNCTION noupdate() RETURNS trigger
LANGUAGE plpgsql AS
$$BEGIN
IF NEW.auxid <> OLD.auxid THEN
RAISE EXCEPTION 'not allowed';
END IF;
END;$$;
CREATE TRIGGER noupdate
BEFORE UPDATE ON product FOR EACH ROW
EXECUTE PROCEDURE noupdate();
答案 1 :(得分:1)
如果您基本上想使auxid
列对外界不可变,那么您可以进行以下操作:
CREATE OR REPLACE FUNCTION stop_change_on_auxId()
RETURNS trigger AS
$BODY$
BEGIN
-- always reset the auxId to the value already stored
NEW.auxId := OLD.auxId;
RETURN NEW;
END;
$BODY$
CREATE TRIGGER avoid_auxid_changes
BEFORE UPDATE
ON product
FOR EACH ROW
EXECUTE PROCEDURE stop_change_on_auxId();