The following bug has been logged online: Bug reference: 3891 Logged by: Adriaan van Os Email address: [EMAIL PROTECTED] PostgreSQL version: 8.2.4 Operating system: Mac OS X 10.5 Description: Multiple UPDATE doesn't handle UNIQUE constraint correctly Details:
Suppose we have a table A with a UNIQUE column Name of type VARCHAR, a PRIMARY KEY record_id of type INT4 and the following records A record_id Name 1 X 2 Y Furthermore, we have a temporary table temp_A with a UNIQUE column Name of type VARCHAR, a PRIMARY KEY record_id of type INT4 and the following records temp_A record_id Name 1 Y 2 X Now, we update table A with values from temporary table temp_A doing something like UPDATE "A" SET "Name" = "temp_A"."Name" FROM "temp_A" WHERE "A".record_id = "temp_A".record_id This will cause a UNIQUE violation in de middle of the UPDATE statement, although after completion of the statement there is no such violation. Although deferred constraints are not yet implemented for Postgres, the docs at <http://www.postgresql.org/docs/8.2/static/sql-set-constraints.html> state: IMMEDIATE constraints are checked at the end of each statement. Apparently, this is not correct, as in the above example constraints are checked in the middle of a statement, rather than at the end. I feel the docs are right here and the software wrong. Sincerely, Adriaan van Os ---------------------------(end of broadcast)--------------------------- TIP 4: Have you searched our list archives? http://archives.postgresql.org