]> granicus.if.org Git - postgresql/commitdiff
Fix broken support for event triggers as extension members.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 30 Dec 2013 19:00:02 +0000 (14:00 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 30 Dec 2013 19:00:02 +0000 (14:00 -0500)
CREATE EVENT TRIGGER forgot to mark the event trigger as a member of its
extension, and pg_dump didn't pay any attention anyway when deciding
whether to dump the event trigger.  Per report from Moshe Jacobson.

Given the obvious lack of testing here, it's rather astonishing that
ALTER EXTENSION ADD/DROP EVENT TRIGGER work, but they seem to.

src/backend/commands/event_trigger.c
src/bin/pg_dump/pg_dump.c

index 328e2a89524ce6da22d5fd6e647ba1a3a82ec8bd..f0df7301d02e69c4be8895443e73756b09f33e2b 100644 (file)
@@ -344,7 +344,10 @@ insert_event_trigger_tuple(char *trigname, char *eventname, Oid evtOwner,
        referenced.objectSubId = 0;
        recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
 
-       /* Post creation hook for new operator family */
+       /* Depend on extension, if any. */
+       recordDependencyOnCurrentExtension(&myself, false);
+
+       /* Post creation hook for new event trigger */
        InvokeObjectPostCreateHook(EventTriggerRelationId, trigoid, 0);
 
        /* Close pg_event_trigger. */
index 1d639fbd474250196a31f74f4f6f9f252bc069b7..eb9ef7583c9ad4691e84d086e03a0df1483cbb0c 100644 (file)
@@ -14332,6 +14332,10 @@ dumpSequenceData(Archive *fout, TableDataInfo *tdinfo)
        destroyPQExpBuffer(query);
 }
 
+/*
+ * dumpTrigger
+ *       write the declaration of one user-defined table trigger
+ */
 static void
 dumpTrigger(Archive *fout, TriggerInfo *tginfo)
 {
@@ -14344,6 +14348,10 @@ dumpTrigger(Archive *fout, TriggerInfo *tginfo)
        const char *p;
        int                     findx;
 
+       /*
+        * we needn't check dobj.dump because TriggerInfo wouldn't have been
+        * created in the first place for non-dumpable triggers
+        */
        if (dataOnly)
                return;
 
@@ -14534,12 +14542,20 @@ dumpTrigger(Archive *fout, TriggerInfo *tginfo)
        destroyPQExpBuffer(labelq);
 }
 
+/*
+ * dumpEventTrigger
+ *       write the declaration of one user-defined event trigger
+ */
 static void
 dumpEventTrigger(Archive *fout, EventTriggerInfo *evtinfo)
 {
        PQExpBuffer query;
        PQExpBuffer labelq;
 
+       /* Skip if not to be dumped */
+       if (!evtinfo->dobj.dump || dataOnly)
+               return;
+
        query = createPQExpBuffer();
        labelq = createPQExpBuffer();