Dimitri Fontaine <dimitri@2ndQuadrant.fr> writes:
> But in makeOperatorDependencies() we find the following piece of code:
> /* In case we are updating a shell, delete any existing entries */
> deleteDependencyRecordsFor(myself.classId, myself.objectId, false);
> false is for bool skipExtensionDeps.
> And now at the end of the same function, dependency is recorded back,
> except in some case:
> oldext = getExtensionOfObject(object->classId, object->objectId);
> if (OidIsValid(oldext))
> {
> /* If already a member of this extension, nothing to do */
> if (oldext == CurrentExtensionObject)
> return;
> The problem lies in catalog scans and SnapshotNow, I think.
[ light goes on... ] We need a CommandCounterIncrement in there.
Else, the code that looks to see if the object is already part of the
extension does not see the pg_depend row as deleted (yet).
Not sure offhand where the cleanest place to put it is.
regards, tom lane