Re: BUG #14150: Attempted to delete invisible tuple - Mailing list pgsql-bugs

From Oskari Saarenmaa
Subject Re: BUG #14150: Attempted to delete invisible tuple
Date
Msg-id 62f3793f-13d6-567c-e512-f29d1fd76d00@aiven.io
Whole thread Raw
In response to Re: BUG #14150: Attempted to delete invisible tuple  (Oskari Saarenmaa <os@aiven.io>)
Responses Re: BUG #14150: Attempted to delete invisible tuple
Re: BUG #14150: Attempted to delete invisible tuple
List pgsql-bugs
06.07.2016, 09:05, Oskari Saarenmaa kirjoitti:
> I ran into this yesterday on 9.5.3 and created a test case before
> noticing this thread.  My test case just inserts a single
> toast-requiring row using ON CONFLICT DO NOTHING and typically fails
> immediately:
>
> pgbench -f random.sql -n -T 2 -c 2
>
> random.sql:
>
> -- CREATE TABLE vtest (id INT UNIQUE, blob BYTEA);
> TRUNCATE vtest;
> INSERT INTO vtest (id, blob) VALUES (1, encrypt(repeat('a',
> 8192)::bytea, 'x'::bytea, 'aes')) ON CONFLICT DO NOTHING;
>
> ISTM this is caused by toast knowing nothing about speculative
> insertion: when two backends have executed a speculative heap_insert
> with a conflicting key and the latter one tries to abort after receiving
> specConflict there's nothing in tqual.c to say that the toast rows
> associated with speculative insertion should be visible to that operation.

The attached patch against current master allows heap_abort_speculative
to delete toast rows created by the same command which makes the above
test case and "make check" run without failures.  Note that I haven't
touched this code before so I don't know how safe my patch is.

/ Oskari

Attachment

pgsql-bugs by date:

Previous
From: Peter Geoghegan
Date:
Subject: Re: BUG #14150: Attempted to delete invisible tuple
Next
From: nahumcastro@gmail.com
Date:
Subject: BUG #14229: pg_config missing from postgresql95-devel