@@ -652,19 +652,28 @@ finish_delayed_invalidation(void)
652
652
{
653
653
PartParentSearch search ;
654
654
Oid parent ;
655
+ List * fresh_rels = delayed_invalidation_parent_rels ;
655
656
656
657
parent = get_parent_of_partition (vague_rel , & search );
657
658
658
659
switch (search )
659
660
{
660
661
/* It's still parent */
661
662
case PPS_ENTRY_PART_PARENT :
662
- try_perform_parent_refresh (parent );
663
+ {
664
+ /* Skip if we've already refreshed this parent */
665
+ if (!list_member_oid (fresh_rels , parent ))
666
+ try_perform_parent_refresh (parent );
667
+ }
663
668
break ;
664
669
665
670
/* It *might have been* parent before (not in PATHMAN_CONFIG) */
666
671
case PPS_ENTRY_PARENT :
667
- remove_pathman_relation_info (parent );
672
+ {
673
+ /* Skip if we've already refreshed this parent */
674
+ if (!list_member_oid (fresh_rels , parent ))
675
+ try_perform_parent_refresh (parent );
676
+ }
668
677
break ;
669
678
670
679
/* How come we still don't know?? */
@@ -793,7 +802,6 @@ try_syscache_parent_search(Oid partition, PartParentSearch *status)
793
802
else
794
803
{
795
804
Relation relation ;
796
- Snapshot snapshot ;
797
805
ScanKeyData key [1 ];
798
806
SysScanDesc scan ;
799
807
HeapTuple inheritsTuple ;
@@ -809,7 +817,6 @@ try_syscache_parent_search(Oid partition, PartParentSearch *status)
809
817
BTEqualStrategyNumber , F_OIDEQ ,
810
818
ObjectIdGetDatum (partition ));
811
819
812
- snapshot = RegisterSnapshot (GetLatestSnapshot ());
813
820
scan = systable_beginscan (relation , InheritsRelidSeqnoIndexId ,
814
821
true, NULL , 1 , key );
815
822
@@ -835,7 +842,6 @@ try_syscache_parent_search(Oid partition, PartParentSearch *status)
835
842
}
836
843
837
844
systable_endscan (scan );
838
- UnregisterSnapshot (snapshot );
839
845
heap_close (relation , AccessShareLock );
840
846
841
847
return parent ;
0 commit comments