Re: Are SQL commands "atomic" ?
От | Stephan Szabo |
---|---|
Тема | Re: Are SQL commands "atomic" ? |
Дата | |
Msg-id | Pine.BSF.4.21.0106071038180.21982-100000@megazone23.bigpanda.com обсуждение исходный текст |
Ответ на | Are SQL commands "atomic" ? (Gerald Gutierrez <gml1@coldresist.com>) |
Список | pgsql-sql |
On Thu, 7 Jun 2001, Gerald Gutierrez wrote: > > 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? Not exactly. It's a bug in the implementation of the unique constraint. The unique constraint is being checked per-row rather than per-statement.
В списке pgsql-sql по дате отправления: