0

列の値が「default_id」と等しくない場合に、テーブル内の列の更新を防ぐトリガー関数を SQL で作成したいと考えています。たとえば、some_id「default_id」に等しい行を更新すると、成功します。some_idただし、 「default_id」と等しくない値を持つ行列を更新すると、例外がスローされます。

CREATE FUNCTION not_allow_update_column_some_id() RETURNS trigger
    LANGUAGE plpgsql AS
$$BEGIN
    IF NEW.some_id <> OLD.some_id AND OLD.some_id <> "default_id" THEN
        RAISE EXCEPTION 'some_id is not allowed to be updated unless it was equal to default value';
    END IF;
    RETURN NEW;
END;$$;

CREATE TRIGGER not_allow_update_column_some_id
    BEFORE UPDATE ON some_table FOR EACH ROW
EXECUTE PROCEDURE not_allow_update_column_some_id();

上記のコードは、「default_id」が値ではなく列であると比較で認識しているように見えるため、機能していないようです。

4

0 に答える 0