Hello Tom,
16.12.2024 07:23, Tom Lane wrote:
Alexander Lakhin <exclusion@gmail.com> writes:
...
So GetSafeSnapshot() waits indefinitely for possibleUnsafeConflicts to
become empty (for other backend to remove itself from the list of possible conflicts
inside ReleasePredicateLocks()), but it doesn't happen.
This seems like an actual bug?
I've reproduced this behavior with two reduced sqls.
prepared_xacts.sql:
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
CREATE TABLE pxtest4 (a int);
PREPARE TRANSACTION 'regress_sub2';
\c -
COMMIT PREPARED 'regress_sub2';
-- the script ends prematurely and doesn't reach COMMIT when \c fails due
-- to the "too many clients" error.
transactions.sql
SELECT pg_sleep(1);
CREATE TABLE writetest (a int);
BEGIN;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ ONLY, DEFERRABLE; -- ok
SELECT * FROM writetest; -- ok
COMMIT;
and parallel_schedule:
test: transactions prepared_xacts
So "transactions" backend just waits for the prepared transaction to
finish.
19.12.2024 01:06, Tom Lane wrote:
We'd still want to make the other changes I mentioned for NetBSD's
sake, though.
Thank you for fixing that shortcoming!
Best regards,
Alexander