テーブルの所有者ではない1人のユーザーに対して、トリガーをオフおよびオンにする権限を付与します。できますか?
テーブルの所有者として、次のように選択したトリガーを無効にする関数(または、Postgres 11以降を使用している場合は procedure )を作成できます。
CREATE OR REPLACE FUNCTION disable_this_trigger()
RETURNS void
LANGUAGE SQL
AS $$
ALTER TABLE something DISABLE TRIGGER this_trigger;
$$ SECURITY DEFINER;
次に、関数を実行するために必要な特権をユーザーに付与します。
GRANT EXECUTE ON FUNCTION disable_this_trigger() TO alice;
これでalice
はその1つのトリガーを無効にできるようになります。この機能をスイッチ(たとえば、オン/オフ)で拡張して有効化を可能にするか、またはこの機能とは逆の機能を作成することができます。
トリックはSECURITY DEFINER
。関数を定義(作成)するユーザーの特権で関数を実行します。上記のように、テーブル(およびスーパーユーザー)のみがそのテーブルのトリガーを無効にできるため、これはテーブルの所有者でなければなりません。