diff options
author | Daniel Gustafsson | 2023-09-25 10:41:49 +0000 |
---|---|---|
committer | Daniel Gustafsson | 2023-09-25 10:41:49 +0000 |
commit | 7750fefdb2b81e0ee09c523d0a21cbd37edaf4b2 (patch) | |
tree | 6e1973a44ffbf5a5ebd91906078ec8bc89d2dc98 /src/backend/commands/event_trigger.c | |
parent | f19669fed3efe872425c80d4b1f45bf59267b7ea (diff) |
Add GUC for temporarily disabling event triggers
In order to troubleshoot misbehaving or buggy event triggers, the
documented advice is to enter single-user mode. In an attempt to
reduce the number of situations where single-user mode is required
(or even recommended) for non-extraordinary maintenance, this GUC
allows to temporarily suspend event triggers.
This was originally extracted from a larger patchset which aimed
at supporting event triggers on login events.
Reviewed-by: Ted Yu <[email protected]>
Reviewed-by: Mikhail Gribkov <[email protected]>
Reviewed-by: Justin Pryzby <[email protected]>
Reviewed-by: Michael Paquier <[email protected]
Reviewed-by: Robert Haas <[email protected]>
Discussion: https://postgr.es/m/[email protected]
Discussion: https://postgr.es/m/[email protected]
Diffstat (limited to 'src/backend/commands/event_trigger.c')
-rw-r--r-- | src/backend/commands/event_trigger.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c index d4b00d1a828..bd812e42d94 100644 --- a/src/backend/commands/event_trigger.c +++ b/src/backend/commands/event_trigger.c @@ -72,6 +72,9 @@ typedef struct EventTriggerQueryState static EventTriggerQueryState *currentEventTriggerState = NULL; +/* GUC parameter */ +bool event_triggers = true; + /* Support for dropped objects */ typedef struct SQLDropObject { @@ -657,8 +660,11 @@ EventTriggerDDLCommandStart(Node *parsetree) * wherein event triggers are disabled. (Or we could implement * heapscan-and-sort logic for that case, but having disaster recovery * scenarios depend on code that's otherwise untested isn't appetizing.) + * + * Additionally, event triggers can be disabled with a superuser-only GUC + * to make fixing database easier as per 1 above. */ - if (!IsUnderPostmaster) + if (!IsUnderPostmaster || !event_triggers) return; runlist = EventTriggerCommonSetup(parsetree, @@ -692,9 +698,9 @@ EventTriggerDDLCommandEnd(Node *parsetree) /* * See EventTriggerDDLCommandStart for a discussion about why event - * triggers are disabled in single user mode. + * triggers are disabled in single user mode or via GUC. */ - if (!IsUnderPostmaster) + if (!IsUnderPostmaster || !event_triggers) return; /* @@ -740,9 +746,9 @@ EventTriggerSQLDrop(Node *parsetree) /* * See EventTriggerDDLCommandStart for a discussion about why event - * triggers are disabled in single user mode. + * triggers are disabled in single user mode or via a GUC. */ - if (!IsUnderPostmaster) + if (!IsUnderPostmaster || !event_triggers) return; /* @@ -811,9 +817,9 @@ EventTriggerTableRewrite(Node *parsetree, Oid tableOid, int reason) /* * See EventTriggerDDLCommandStart for a discussion about why event - * triggers are disabled in single user mode. + * triggers are disabled in single user mode or via a GUC. */ - if (!IsUnderPostmaster) + if (!IsUnderPostmaster || !event_triggers) return; /* |