Re: BUG #12330: ACID is broken for unique constraints - Mailing list pgsql-hackers

From Nikita Volkov
Subject Re: BUG #12330: ACID is broken for unique constraints
Date
Msg-id CACvKsMFr2JjUKUy_EsJS6RThM7Qk7G-RfsmhfUzhF8T2GNwLcQ@mail.gmail.com
Whole thread Raw
In response to Re: BUG #12330: ACID is broken for unique constraints  (Merlin Moncure <mmoncure@gmail.com>)
List pgsql-hackers

I believe, the objections expressed in this thread miss a very important point of all this: the isolation property (the "I" in ACID) is violated.

Here’s a quote from the Wikipedia article on ACID:

The isolation property ensures that the concurrent execution of transactions results in a system state that would be obtained if transactions were executed serially, i.e., one after the other.

The original example proves that it's violated. Such behaviour can neither be expected by a user, nor is even mentioned anywhere. Instead in the first paragraph of the “About” section of the Postgres site it states:

It is fully ACID compliant

Which is basically just a lie, until issues like this one get dealt with.


2014-12-29 18:31 GMT+03:00 Merlin Moncure <mmoncure@gmail.com>:
On Mon, Dec 29, 2014 at 9:09 AM, Kevin Grittner <kgrittn@ymail.com> wrote:
> Merlin Moncure <mmoncure@gmail.com> wrote:
>> In other words, the current behavior is:
>> txn A,B begin
>> txn A inserts
>> txn B inserts over A, locks, waits
>> txn A commits.  B aborts with duplicate key error
>
> What I'm proposing is that for serializable transactions B would
> get a serialization failure; otherwise B would get a duplicate key
> error.  If the retry of B looks at something in the database to
> determine what it's primary key should be it will get a new value
> on the retry, since it will be starting after the commit of A.  If
> it is using a literal key, not based on something changed by A, it
> will get a duplicate key error on the retry, since it will be
> starting after the commit of A.
>
> It will either succeed on retry or get an error for a different
> reason.

In that case: we don't agree.  How come duplicate key errors would be
reported as serialization failures but not RI errors (for example,
inserting a record pointing to another record which a concurrent
transaction deleted)?

IMO, serialization errors are an implementation artifact and should
not mask well defined errors in SQL under any circumstances (or if
they must, those cases should absolutely be as narrow as possible).

merlin

pgsql-hackers by date:

Previous
From: Kevin Grittner
Date:
Subject: Re: BUG #12330: ACID is broken for unique constraints
Next
From: Nikita Volkov
Date:
Subject: Re: BUG #12330: ACID is broken for unique constraints