On Jun 23, 2010, at 5:36 PM, Mark Wong wrote:

> On Jun 22, 2010, at 1:34 AM, Simon Riggs wrote:
> 
>> On Mon, 2010-06-21 at 20:53 -0400, Robert Haas wrote:
>>> On Mon, Jun 21, 2010 at 7:51 PM, gabrielle <gor...@gmail.com> wrote:
>>>> On Thu, 2010-06-17 at 14:50 -0400, Alvaro Herrera asked:
>>>>> How does it play with ON_ERROR_STOP/ROLLBACK?
>>>> 
>>>> With ON_ERROR_STOP=ON, psql issues an error when it encounters one,
>>>> stops processing the file that contains the error, and then continues
>>>> to process any remaining files.
>> 
>> That would be undesirable.
>> 
>>>> I'm still investigating ON_ERROR_ROLLBACK.  I need to tinker with it
>>>> some more before I say anything concrete.
>>>> 
>>>> On Fri, Jun 18, 2010 at 1:48 AM, Simon Riggs <si...@2ndquadrant.com> wrote:
>>>>> Also, how does it play with --single-transaction.
>>>> That was buried in our original report :) "BEGIN-COMMIT statements
>>>> within the files cause warnings when the command is wrapped in a
>>>> transaction with the -1 switch (as specified in the patch submission)"
>>>> 
>>>> To expand upon that a bit:  when psql encounters a file that contains
>>>> a BEGIN statement, you get the expected "WARNING: there is already a
>>>> transaction in progress" message.  The COMMIT at the end of that file
>>>> (assuming the user doesn't forget it) generates a COMMIT.  Commands
>>>> after that commit, or in any remaining files to be processed, are
>>>> dealt with according to the user's autocommit settings:
>>>> - if autocommit is ON, statements in the remaining files are processed
>>>> & committed;  the implicit COMMIT at the end of the whole thing then
>>>> generates a "WARNING: there is no transaction in progress" message
>>>> - if autocommit is OFF, statements in the remaining files generate
>>>> "ERROR:  current transaction is aborted, commands ignored until end of
>>>> transaction block" messages.
>> 
>> This is the existing behaviour.
>> 
>>> So none of the above sounds like desired behavior to me...  is that just me?
>> 
>> Single transaction needs some help, but that's not the fault of this
>> patch.
> 
> I took a closer look at what was going on and what it would take to meet some 
> of these expectations.  In main() the patch adds BEGIN and COMMIT statements 
> outside the call to process_file() in src/bin/psql/command.c.  Here lies the 
> previous logic for handling single transaction.  Since it remains, it appears 
> that BEGIN can be issued twice before any statements are executed if the 
> single transaction switch is used.  Plus there are other a couple of places 
> that call this particular process_file() function, but I think those are 
> straightforward cases to deal with.

Heh, not close enough.  I was wrong about that scenario.  I can see now that 
the single transaction flag is always set to false in process_file().  I think 
that turns the single transaction handling in process_file() into dead code 
with the patch like this.

Regards,
Mark


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to