From 660a081c3f6892dae353136fa0883cd3c69813d4 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 22 Aug 2011 10:55:47 -0400 Subject: [PATCH] Fix handling of extension membership when filling in a shell operator. The previous coding would result in deleting and not re-creating the extension membership pg_depend rows, since there was no CommandCounterIncrement that would allow recordDependencyOnCurrentExtension to see that the deletion had happened. Make it work like the shell type case, ie, keep the existing entries (and then throw an error if they're for the wrong extension). Per bug #6172 from Hitoshi Harada. Investigation and fix by Dimitri Fontaine. --- src/backend/catalog/pg_operator.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/backend/catalog/pg_operator.c b/src/backend/catalog/pg_operator.c index 772e5d438d..14404646b1 100644 --- a/src/backend/catalog/pg_operator.c +++ b/src/backend/catalog/pg_operator.c @@ -774,8 +774,11 @@ makeOperatorDependencies(HeapTuple tuple) myself.objectId = HeapTupleGetOid(tuple); myself.objectSubId = 0; - /* In case we are updating a shell, delete any existing entries */ - deleteDependencyRecordsFor(myself.classId, myself.objectId, false); + /* + * In case we are updating a shell, delete any existing entries, except + * for extension membership which should remain the same. + */ + deleteDependencyRecordsFor(myself.classId, myself.objectId, true); deleteSharedDependencyRecordsFor(myself.classId, myself.objectId, 0); /* Dependency on namespace */ -- GitLab