列の値が「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」が値ではなく列であると比較で認識しているように見えるため、機能していないようです。