"scott.marlowe" <[EMAIL PROTECTED]> writes:

> Postgresql supports Serializable transactions, which are 100% ACID 
> compliant. 

How can I activate it? 8-)

Yes, I know about SET TRANSACTION ISOLATION LEVEL SERIALIZABLE, please
read on.

Given the two tables:

CREATE TABLE items (item INTEGER);
CREATE TABLE counts (count INTEGER);

And transactions following this pattern:

  number := <some number>;
  INSERT INTO items VALUES (number);
  nr := SELECT COUNT(*) FROM items;
  INSERT INTO counts VALUES (nr);
  COMMIT;

If these transactions are executed serially, the following condition
always holds once the tables are non-empty:

(*)  (SELECT COUNT(*) FROM items) = (SELECT MAX(count) FROM counts)

Now look at the following history:

Session 1                           Session 2

number := <some number>;
                                    number := <some number>;
INSERT INTO items VALUES (number);
                                    INSERT INTO items VALUES (number);
nr := SELECT COUNT(*) FROM items;
                                    nr := SELECT COUNT(*) FROM items;
INSERT INTO counts VALUES (nr);
                                    INSERT INTO counts VALUES (nr);
COMMIT;
                                    COMMIT;

If you enter these commands in two parallel psql sessions, in the
order indicated, condition (*) no longer holds once both transactions
are completed.  Therefore, PostgreSQL must have generated a
non-serializable history.

Is this a bug, or is SQLxx serializability defined in different terms?

---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

               http://www.postgresql.org/docs/faqs/FAQ.html

Reply via email to