summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2011-08-22 10:55:47 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2011-08-22 10:56:03 -0400
commit9c471d24126280a5f90ee9d276a9df37480dfcde (patch)
treeb43ef941464620af06947d078eaa953f92c7cbb6
parent38c9eb8fee298a9242bb2049c4fdf94407187d0c (diff)
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.
-rw-r--r--src/backend/catalog/pg_operator.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/backend/catalog/pg_operator.c b/src/backend/catalog/pg_operator.c
index 013707495d1..88410e5090b 100644
--- a/src/backend/catalog/pg_operator.c
+++ b/src/backend/catalog/pg_operator.c
@@ -776,8 +776,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 */