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