ブール型の列を追加したテーブルがありますdone
この列がTrue
の場合、その行の未処理のアクション(削除、更新)を防止したいと思います。テーブルの更新または削除を防止する
私はこのトリガーを書いた:
CREATE TRIGGER productstock_beforeupdate
BEFORE UPDATE OR DELETE
ON table
FOR EACH ROW
EXECUTE PROCEDURE trig()
CREATE OR REPLACE FUNCTION trig()
RETURNS trigger AS
$$
begin
if TG_OP='UPDATE' or TG_OP='DELETE' then
if old.done=true then
raise exception 'cant do that';
return null;
end if;
end if;
return new;
end;
$$
autorizedトランザクションがデータを変更したい場合は、このトリガーを無効にする最初のを持っています。
私はそれは私が「0行が削除された」と、削除を実行しません返し
done=False
で行を削除しようとすると、このアイデアは、しかし、動作するはずです。
私の引き金に何が間違っていますか?
トリガーを削除すると、削除が機能します。 – ban
@a_horse_with_no_name done = falseの場合、削除と更新の両方が機能しない – ban
DML?私はこれがdoesntの仕事だと思っています。なぜなら、トリガーはbefore after – ban