Bruce Momjian wrote:

Greg Sabino Mullane wrote:
> The SQL-Standard itself says that errors inside transactions should only
> rollback the last statement, if possible. So why is that not > implemented in
> PostgreSQL? What I read from past discussions here, is because it's > just
> unsave and will lead to data-garbage if you aren't very careful.


That's a good point: if that is indeed what the standard says, we should
probably see about following it. Rolling back to the last savepoint seems
a reasonable behavior to me.

OK, so we need to make a decision. Right now I have Greg's patch that is enabled by "\set ON_ERROR_ROLLBACK on":

test=> \set ON_ERROR_ROLLBACK on
test=> BEGIN;
BEGIN
test=> lkjasdf;
ERROR:  syntax error at or near "lkjasdf" at character 1
LINE 1: lkjasdf;
        ^
test=> SELECT 1;
?column?
----------
        1
(1 row)

test=> COMMIT;
COMMIT

The question is what to make the default:

disable it by default for all sessions (current patch)
enable it by default only for interactive sessions, like AUTOCOMMIT
enable it by default for all sessions (breaks too many apps)
add a third mode called 'ttyonly' and figure out a default

My vote: 1) disable it by default for all sessions

2) enable it with \set (can be set in .psqlrc), but provide a way so it only works with interactive commands, either always, or something like
\set ON_ERROR_ROLLBACK interactive


Best Regards,
Michael Paesold



---------------------------(end of broadcast)--------------------------- TIP 6: Have you searched our list archives?

http://archives.postgresql.org

Reply via email to