On Tue, Sep 25, 2018 at 01:39:59PM +0200, Dmitry Dolgov wrote: > Shouldn't it be fixed by adding EventTriggerAlterTableStart? Judging from the > following call of ATController, we can just pass NULL as parsetree.
Hmm. I don't think that this is correct as this data could always be used to fetch a command tag, right? It seems to me instead that we should pass down IndexStmt and handle things like the attached. Thoughts? -- Michael
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 9229f619d2..b0cb5514d3 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -50,6 +50,7 @@ #include "catalog/pg_type.h" #include "catalog/storage.h" #include "commands/tablecmds.h" +#include "commands/event_trigger.h" #include "commands/trigger.h" #include "executor/executor.h" #include "miscadmin.h" @@ -212,7 +213,8 @@ relationHasPrimaryKey(Relation rel) void index_check_primary_key(Relation heapRel, IndexInfo *indexInfo, - bool is_alter_table) + bool is_alter_table, + IndexStmt *stmt) { List *cmds; int i; @@ -280,7 +282,11 @@ index_check_primary_key(Relation heapRel, * unduly. */ if (cmds) + { + EventTriggerAlterTableStart((Node *) stmt); AlterTableInternal(RelationGetRelid(heapRel), cmds, true); + EventTriggerAlterTableEnd(); + } } /* diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index ab3d9a0a48..4fc279e86f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -666,7 +666,7 @@ DefineIndex(Oid relationId, * Extra checks when creating a PRIMARY KEY index. */ if (stmt->primary) - index_check_primary_key(rel, indexInfo, is_alter_table); + index_check_primary_key(rel, indexInfo, is_alter_table, stmt); /* * If this table is partitioned and we're creating a unique index or a diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 1205dbc0b5..64e1059e94 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -7074,7 +7074,7 @@ ATExecAddIndexConstraint(AlteredTableInfo *tab, Relation rel, /* Extra checks needed if making primary key */ if (stmt->primary) - index_check_primary_key(rel, indexInfo, true); + index_check_primary_key(rel, indexInfo, true, stmt); /* Note we currently don't support EXCLUSION constraints here */ if (stmt->primary) diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index f20c5f789b..35a29f3498 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -40,7 +40,8 @@ typedef enum extern void index_check_primary_key(Relation heapRel, IndexInfo *indexInfo, - bool is_alter_table); + bool is_alter_table, + IndexStmt *stmt); #define INDEX_CREATE_IS_PRIMARY (1 << 0) #define INDEX_CREATE_ADD_CONSTRAINT (1 << 1)
signature.asc
Description: PGP signature