Hi hackers,
I was trying to create event trigger inside DO statement inside an
extension SQL script and noticed that the new event trigger has empty
evtevent field.
After some tinkering with gdb I found out that the memory context
switches sometimes clear the eventname in CreateEventTrigStmt struct.
The reason for this is that _copyCreateEventTrigStmt uses
COPY_SCALAR_FIELD on eventname instead of COPY_STRING_FIELD.
Attached patch fixes this and also the same issue in
_equalCreateEventTrigStmt.
This should be back-patched to 9.3 where event triggers were introduced.
--
Petr Jelinek http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services
diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c
index aa053a0..24addfb 100644
--- a/src/backend/nodes/copyfuncs.c
+++ b/src/backend/nodes/copyfuncs.c
@@ -3610,7 +3610,7 @@ _copyCreateEventTrigStmt(const CreateEventTrigStmt *from)
CreateEventTrigStmt *newnode = makeNode(CreateEventTrigStmt);
COPY_STRING_FIELD(trigname);
- COPY_SCALAR_FIELD(eventname);
+ COPY_STRING_FIELD(eventname);
COPY_NODE_FIELD(whenclause);
COPY_NODE_FIELD(funcname);
diff --git a/src/backend/nodes/equalfuncs.c b/src/backend/nodes/equalfuncs.c
index 719923e..9c19f44 100644
--- a/src/backend/nodes/equalfuncs.c
+++ b/src/backend/nodes/equalfuncs.c
@@ -1805,7 +1805,7 @@ static bool
_equalCreateEventTrigStmt(const CreateEventTrigStmt *a, const CreateEventTrigStmt *b)
{
COMPARE_STRING_FIELD(trigname);
- COMPARE_SCALAR_FIELD(eventname);
+ COMPARE_STRING_FIELD(eventname);
COMPARE_NODE_FIELD(funcname);
COMPARE_NODE_FIELD(whenclause);
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers