|
|
|
|
@ -566,6 +566,25 @@ EventTriggerDDLCommandStart(Node *parsetree) |
|
|
|
|
const char *tag; |
|
|
|
|
EventTriggerData trigdata; |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Event Triggers are completely disabled in standalone mode. There are |
|
|
|
|
* (at least) two reasons for this: |
|
|
|
|
* |
|
|
|
|
* 1. A sufficiently broken event trigger might not only render the |
|
|
|
|
* database unusable, but prevent disabling itself to fix the situation. |
|
|
|
|
* In this scenario, restarting in standalone mode provides an escape |
|
|
|
|
* hatch. |
|
|
|
|
* |
|
|
|
|
* 2. BuildEventTriggerCache relies on systable_beginscan_ordered, and |
|
|
|
|
* therefore will malfunction if pg_event_trigger's indexes are damaged. |
|
|
|
|
* To allow recovery from a damaged index, we need some operating mode |
|
|
|
|
* 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.) |
|
|
|
|
*/ |
|
|
|
|
if (!IsUnderPostmaster) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* We want the list of command tags for which this procedure is actually |
|
|
|
|
* invoked to match up exactly with the list that CREATE EVENT TRIGGER |
|
|
|
|
|