我有一个 PostgreSQL 数据库,其中有一个名为 product
的表。在此表中,我有一个名为 auxId
的自动增量列(不是表的主键)。我想避免对此专栏进行任何更新。如何使用 PostgreSQL 触发器完成此操作?
我试过:
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$
-- trigger to avoid updates on auxId
CREATE TRIGGER avoid_auxid_changes
BEFORE UPDATE
ON product
FOR EACH ROW
EXECUTE PROCEDURE stop_change_on_auxId();
但我相信这会停止整行的更新。我只需要避免对 auxId
字段进行更新,但允许对其行进行任何其他更新。
最佳答案
如果您基本上想让 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();
关于PostgreSQL 触发器以避免列中的更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56082230/