On Jun 17, 2009, at 8:26 AM, Carol Walter wrote:
> I have a program (PHP) that is executing a number of SQL commands as
> a single transaction. At the beginning of the transaction, I have a
> "BEGIN" and at the end I have a "COMMIT". If one of the
> transactions fails, do I have to explicitly issue a "ROLLBACK"
> command, or will postgres do this automatically because one of the
> commands fails?
Postgres does not automatically issue a "ROLLBACK" command. But you
can use "END" instead of "COMMIT". This will commit the transaction if
there are no errors, otherwise it will rollback:
db=# begin;
BEGIN
db=# select 1/0;
ERROR: division by zero
db=# end;
ROLLBACK
Interesting, though, I just noticed that this behavior is not
discussed in the documentation.
http://www.postgresql.org/docs/8.3/interactive/sql-end.html
John DeSoi, Ph.D.