I notice that the large-object operations in pg_largeobject.c and
inv_api.c all use SnapshotNow to access large-object tuples. This
means they are not really MVCC compliant. For example, I could be
reading a large object that someone else is writing; if he commits
mid-read, then I will see some old data and some updated data.
This seems wrong.
In particular, pg_dump cannot promise to dump a consistent snapshot
of large objects, because what it reads will be read under SnapshotNow.
I suggest that large object tuples are user data and so should be
read using the QuerySnapshot established at start of transaction.
Comments anyone? Is it possible that changing this will break any
existing applications that depend on the current behavior?
regards, tom lane