diff --git a/pglogical_output_plugin.c b/pglogical_output_plugin.c
index 9f1bf9c..98aae62 100644
--- a/pglogical_output_plugin.c
+++ b/pglogical_output_plugin.c
@@ -630,6 +630,10 @@ pglogical_change_filter(PGLogicalOutputData *data, Relation relation,
 		HeapTuple		newtup = change->data.tp.newtuple ?
 			&change->data.tp.newtuple->tuple : NULL;
 #endif
+#if PG_VERSION_NUM >= 180000
+		Snapshot		save_historic_snapshot;
+		HTAB		   *save_tuplecids;
+#endif
 
 		/* Skip empty changes. */
 		if (!newtup && !oldtup)
@@ -638,6 +642,12 @@ pglogical_change_filter(PGLogicalOutputData *data, Relation relation,
 			return false;
 		}
 
+#if PG_VERSION_NUM >= 180000
+		Assert(HistoricSnapshotActive());
+		save_historic_snapshot = GetCatalogSnapshot(InvalidOid);
+		save_tuplecids = HistoricSnapshotGetTupleCids();
+		TeardownHistoricSnapshot(false);
+#endif
 		PushActiveSnapshot(GetTransactionSnapshot());
 
 		estate = create_estate_for_relation(relation, false);
@@ -667,6 +677,9 @@ pglogical_change_filter(PGLogicalOutputData *data, Relation relation,
 		FreeExecutorState(estate);
 
 		PopActiveSnapshot();
+#if PG_VERSION_NUM >= 180000
+		SetupHistoricSnapshot(historic_snapshot, tuplecids);
+#endif
 	}
 
 	/* Make sure caller is aware of any attribute filter. */
