diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2022-05-20 18:52:55 +0200 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2022-05-20 18:52:55 +0200 |
commit | 6029861916e8e2c0155c332c10f182a22619c663 (patch) | |
tree | 26cff987f4534778d977761dd676e1569d513359 /src/backend/commands/opclasscmds.c | |
parent | b39838889e76274b107935fa8e8951baf0e8b31b (diff) | |
download | postgresql-6029861916e8e2c0155c332c10f182a22619c663.tar.gz postgresql-6029861916e8e2c0155c332c10f182a22619c663.zip |
Fix DDL deparse of CREATE OPERATOR CLASS
When an implicit operator family is created, it wasn't getting reported.
Make it do so.
This has always been missing. Backpatch to 10.
Author: Masahiko Sawada <sawada.mshk@gmail.com>
Reported-by: Leslie LEMAIRE <leslie.lemaire@developpement-durable.gouv.fr>
Reviewed-by: Amit Kapila <amit.kapila16@gmail.com>
Reviewed-by: Michael Paquiër <michael@paquier.xyz>
Discussion: https://postgr.es/m/f74d69e151b22171e8829551b1159e77@developpement-durable.gouv.fr
Diffstat (limited to 'src/backend/commands/opclasscmds.c')
-rw-r--r-- | src/backend/commands/opclasscmds.c | 19 |
1 files changed, 14 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); } |