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