On Tue, Sep 8, 2020 at 5:16 PM Tom Lane <t...@sss.pgh.pa.us> wrote:

> Magnus Hagander <mag...@hagander.net> writes:
> > On Tue, Sep 8, 2020 at 4:38 PM Tom Lane <t...@sss.pgh.pa.us> wrote:
> >> The reason that's not so is that whether or not transaction A *has*
> >> touched table B is irrelevant.  It *could* read table B at any moment,
> >> for all autovacuum knows.  Therefore we cannot remove rows that should
> >> still be visible to A's snapshot.
>
> > Right. But in the default isolation level, the snapshot of A gets reset
> > between each SELECT, and does not persist to the end of the transaction.
>
> Well, we don't know what isolation level the OP is using.  We also don't
>

Per the thread, he's using the default, which should be read committed.



> know what PG version he's using.  From memory, it hasn't been that long
>

Per his session list, 11.2.



> since we fixed things so that an idle read-committed transaction
> advertises no xmin.  It's also possible that the transaction isn't really
> idle between statements (eg, if it's holding open cursors, or the like).
>

Oh, now *cursors* is definitely something I didn't think of. And especially
in the context of ODBC, I wonder if it might be creating cursors
transparently, and that this somehow causes the problems.

Michael, do you know if that might be the case? Or try enabling
log_statements to check if it is?

-- 
 Magnus Hagander
 Me: https://www.hagander.net/ <http://www.hagander.net/>
 Work: https://www.redpill-linpro.com/ <http://www.redpill-linpro.com/>

Reply via email to