Jos*_*iga 4 postgresql triggers
我有一个 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();
Run Code Online (Sandbox Code Playgroud)
但我相信这将停止整行的更新。我只需要避免对 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();
Run Code Online (Sandbox Code Playgroud)
当然,只要在列更改时抛出错误:
CREATE FUNCTION noupdate() RETURNS trigger
LANGUAGE plpgsql AS
$$BEGIN
IF NEW.auxid <> OLD.auxid THEN
RAISE EXCEPTION 'not allowed';
END IF;
RETURN NEW;
END;$$;
CREATE TRIGGER noupdate
BEFORE UPDATE ON product FOR EACH ROW
EXECUTE PROCEDURE noupdate();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2419 次 |
| 最近记录: |