Simon Riggs wrote:
> Recent change:
>
> An idle-in-transaction transaction can also hold a temporary file. Think
> of an open cursor, for example. Therefore, remove the distinction
> between CONFLICT_MODE_ERROR and CONFLICT_MODE_ERROR_IF_NOT_IDLE,
> idle-in-transaction backends need to be killed too when a tablespace is
> dropped.
>
> Open cursors still have snapshots, so they would not be treated as idle
> in transaction.
A backend is idle-in-transaction whenever a transaction is open and the
backend is waiting for a command from the client. Whether it has active
snapshots or open cursors doesn't affect that.
> If the user has a held cursor then they can keep it,
> since it has already read the database and released the snapshot.
A held cursor can keep a temp file open.
I suspect you missed the context of this change. It's about the code in
tablespc.c, to kill all backends that might have a temporary file in a
tablespace that's being dropped. It's not about tuple visibility but
temporary files.
-- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com