Thread: Transaction bug

Transaction bug

From
Brage Førland
Date:
If you send a transaction as a single query to the backend, it ignores the
commit if the transaction is aborted:

Example:

testdb=# CREATE TEMP TABLE test(test INT PRIMARY KEY, CONSTRAINT testconstraint CHECK (test > 2)  );
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index 'test_pkey' for table 'test'
CREATE TABLE
testdb=# START TRANSACTION\; INSERT INTO test VALUES(1)\; COMMIT\; ;
ERROR:  ExecInsert: rejected due to CHECK constraint "testconstraint" on "test"
testdb=# SELECT * FROM test;
ERROR:  current transaction is aborted, queries ignored until end of transaction block

(Tested with PostgreSQL 7.3.4)

--
Brage Førland


Re: Transaction bug

From
Tom Lane
Date:
Brage Førland <brage@zoo.uib.no> writes:
> If you send a transaction as a single query to the backend, it ignores the
> commit if the transaction is aborted:

This is not a bug, it is the intended behavior.  An error causes
processing of the current querystring to be abandoned.  If you don't
want that, don't issue the commands in a single querystring.
        regards, tom lane