diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c index d4b5b2ade1..78a73c2e9a 100644 --- a/src/backend/catalog/dependency.c +++ b/src/backend/catalog/dependency.c @@ -449,6 +449,7 @@ findDependentObjects(const ObjectAddress *object, int maxDependentObjects; ObjectAddressStack mystack; ObjectAddressExtra extra; + SnapshotData SnapshotDirty; /* * If the target object is already being visited in an outer recursion @@ -823,8 +824,14 @@ findDependentObjects(const ObjectAddress *object, else nkeys = 2; + /* + * We use a "dirty snapshot" to read rows modified by transactions still + * in-progress, which wouldn't be visible with normal snapshots. + */ + InitDirtySnapshot(SnapshotDirty); + scan = systable_beginscan(*depRel, DependReferenceIndexId, true, - NULL, nkeys, key); + &SnapshotDirty, nkeys, key); while (HeapTupleIsValid(tup = systable_getnext(scan))) {