作为表的所有者,您可以创建一个函数(或者,如果您使用的是 Postgres 11 或更高版本,则可以创建一个procedure)来禁用您选择的触发器,例如:
CREATE OR REPLACE FUNCTION disable_this_trigger()
RETURNS void
LANGUAGE SQL
AS $$
ALTER TABLE something DISABLE TRIGGER this_trigger;
$$ SECURITY DEFINER;
Run Code Online (Sandbox Code Playgroud)
然后向您的用户授予必要的权限以执行该功能:
GRANT EXECUTE ON FUNCTION disable_this_trigger() TO alice;
Run Code Online (Sandbox Code Playgroud)
现在alice
将能够禁用那个触发器。您可以使用开关(例如开/关)扩展此功能以实现启用,或者创建一个与此功能相反的类似功能。
诀窍在于SECURITY DEFINER
。它使函数以定义(创建)函数的用户的权限运行。如上所述,这必须是表的所有者,因为只有它(和超级用户)才能禁用它的触发器。