diff options
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/commands/opclasscmds.c | 19 | ||||
-rw-r--r-- | src/backend/tcop/utility.c | 6 |
2 files changed, 20 insertions, 5 deletions
diff --git a/src/backend/commands/opclasscmds.c b/src/backend/commands/opclasscmds.c index 66987966b4e..7a931ab758d 100644 --- a/src/backend/commands/opclasscmds.c +++ b/src/backend/commands/opclasscmds.c @@ -240,7 +240,8 @@ get_opclass_oid(Oid amID, List *opclassname, bool missing_ok) * Caller must have done permissions checks etc. already. */ static ObjectAddress -CreateOpFamily(const char *amname, const char *opfname, Oid namespaceoid, Oid amoid) +CreateOpFamily(CreateOpFamilyStmt *stmt, const char *opfname, + Oid namespaceoid, Oid amoid) { Oid opfamilyoid; Relation rel; @@ -264,7 +265,7 @@ CreateOpFamily(const char *amname, const char *opfname, Oid namespaceoid, Oid am ereport(ERROR, (errcode(ERRCODE_DUPLICATE_OBJECT), errmsg("operator family \"%s\" for access method \"%s\" already exists", - opfname, amname))); + opfname, stmt->amname))); /* * Okay, let's create the pg_opfamily entry. @@ -312,6 +313,10 @@ CreateOpFamily(const char *amname, const char *opfname, Oid namespaceoid, Oid am /* dependency on extension */ recordDependencyOnCurrentExtension(&myself, false); + /* Report the new operator family to possibly interested event triggers */ + EventTriggerCollectSimpleCommand(myself, InvalidObjectAddress, + (Node *) stmt); + /* Post creation hook for new operator family */ InvokeObjectPostCreateHook(OperatorFamilyRelationId, opfamilyoid, 0); @@ -447,13 +452,17 @@ DefineOpClass(CreateOpClassStmt *stmt) } else { + CreateOpFamilyStmt *opfstmt; ObjectAddress tmpAddr; + opfstmt = makeNode(CreateOpFamilyStmt); + opfstmt->opfamilyname = stmt->opclassname; + opfstmt->amname = stmt->amname; + /* * Create it ... again no need for more permissions ... */ - tmpAddr = CreateOpFamily(stmt->amname, opcname, - namespaceoid, amoid); + tmpAddr = CreateOpFamily(opfstmt, opcname, namespaceoid, amoid); opfamilyoid = tmpAddr.objectId; } } @@ -792,7 +801,7 @@ DefineOpFamily(CreateOpFamilyStmt *stmt) errmsg("must be superuser to create an operator family"))); /* Insert pg_opfamily catalog entry */ - return CreateOpFamily(stmt->amname, opfname, namespaceoid, amoid); + return CreateOpFamily(stmt, opfname, namespaceoid, amoid); } diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c index 0e7b7b31384..6a5bcded558 100644 --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@ -1721,6 +1721,12 @@ ProcessUtilitySlow(ParseState *pstate, case T_CreateOpFamilyStmt: address = DefineOpFamily((CreateOpFamilyStmt *) parsetree); + + /* + * DefineOpFamily calls EventTriggerCollectSimpleCommand + * directly. + */ + commandCollected = true; break; case T_CreateTransformStmt: |