On 20/08/2025 03:37, Noah Misch wrote:
On Tue, Aug 19, 2025 at 11:45:01PM +0300, Heikki Linnakangas wrote:
How about the attached, then? It reverts the GetTransactionSnapshot()
change. But to still catch at least some of the invalid uses of the historic
snapshot, it adds checks to heap_beginscan() and index_beginscan(), to
complain if they are called on a non-catalog relation with a historic
snapshot.

@@ -1143,6 +1143,15 @@ heap_beginscan(Relation relation, Snapshot snapshot,
        if (!(snapshot && IsMVCCSnapshot(snapshot)))
                scan->rs_base.rs_flags &= ~SO_ALLOW_PAGEMODE;
+ /* Check that a historic snapshot is not used for non-catalog tables */
+       if (snapshot &&
+               IsHistoricMVCCSnapshot(snapshot) &&
+               !RelationIsAccessibleInLogicalDecoding(relation))
+       {
+               elog(ERROR, "cannot query non-catalog table \"%s\" during logical 
decoding",
+                        RelationGetRelationName(relation));
+       }
+

I feel post-beta3 is late for debut of restrictions like this.  How about a
pure revert, then add those restrictions in v19?  Should be s/elog/ereport/,
also.

Ok, fair. I committed the revert to v18, and the revert + additional checks to master.

- Heikki



Reply via email to