Are SQL commands "atomic" ?

From: Gerald Gutierrez <gml1(at)coldresist(dot)com>
To: pgsql-sql(at)postgresql(dot)org
Subject: Are SQL commands "atomic" ?
Date: 2001-06-07 16:59:50
Message-ID: 5.1.0.14.0.20010607095946.00ac7e90@coldresist.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql


I'm using 7.1.1 right now, and have the following table:

id | s
----+-------
1 | alpha
2 | beta
3 | gamma
4 | delta
(4 rows)

I'd like to switch the id of "beta" to 3 and the id of "gamma" to 2 ("flip"
them). Since id is the PK, it must remain unique and so I can't just set
the two lines using two UPDATEs.

My solution is:

UPDATE t1 SET id=id#1 WHERE id=2 OR id=3; -- # is the XOR operator

where 2#1=3 and 3#1=2. One statement will change both values as I want. But
when I run the statement, the server replies with:

ERROR: Cannot insert a duplicate key into unique index t1_pkey

If the statement is "atomic", then if the statement succeeds, the IDs will
be unique and the error is incorrect. Does this imply that SQL statements
are not actually atomic?

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Gerald Gutierrez 2001-06-07 17:00:02 Getting row with id=max(id)
Previous Message Clayton Cottingham aka drfrog 2001-06-07 16:50:34 Re: plperl