特定のユーザーが変更を加えたときに PostgreSQL のトリガーが無効になる方法を改善したいと考えています。
例: トリガーは、「アプリ」ユーザーによる変更を認識せず、他のユーザーによるすべての変更で開始する必要があります。
現在、次のコードを使用しています。
IF (CURRENT_USER = 'app') THEN
RETURN NULL;
END IF;
のように:
CREATE OR REPLACE FUNCTION update_flag() RETURNS trigger AS $BODY$
BEGIN
IF (CURRENT_USER = 'app') THEN
RETURN NULL;
END IF;
IF (TG_OP = 'INSERT') THEN
...
ELSIF (TG_OP = 'UPDATE') THEN
...
ELSIF (TG_OP = 'DELETE') THEN
...
END IF;
RETURN NULL;
END;$BODY$
LANGUAGE plpgsql;
CREATE TRIGGER trigger_categories AFTER INSERT OR UPDATE OR DELETE
ON "categories"
FOR EACH ROW
EXECUTE PROCEDURE update_flag();
ここに改善の余地はありますか?CREATE TRIGGER
への呼び出しの前に、条件を部分に埋め込むことを考えましたがupdate_flag()
、方法がわかりません。違いはありますか?