Re: Vote totals for SET in aborted transaction - Mailing list pgsql-hackers

From Marc G. Fournier
Subject Re: Vote totals for SET in aborted transaction
Date
Msg-id 20020429150943.R15173-100000@mail1.hub.org
Whole thread Raw
In response to Re: Vote totals for SET in aborted transaction  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: Vote totals for SET in aborted transaction
Re: Vote totals for SET in aborted transaction
List pgsql-hackers
What happens inside of a nested transaction, assuming we do have those
evenually ... ?

On Mon, 29 Apr 2002, Tom Lane wrote:

> Hannu Krosing <hannu@tm.ee> writes:
> > Perhaps we could do
> > SET SET TO LOCAL TO TRANSACTION;
> > Which would affect itself and all subsequent SET commands up to
> > SET SET TO GLOBAL;
> > or end of transaction.
>
> This makes my head hurt.  If I do
>
>     SET foo TO bar;
>     begin;
>     SET SET TO GLOBAL;
>     SET foo TO baz;
>     SET SET TO LOCAL TO TRANSACTION;
>     end;
>
> (assume no errors) what is the post-transaction state of foo?
>
> What about this case?
>
>     SET foo TO bar;
>     begin;
>     SET SET TO GLOBAL;
>     SET foo TO baz;
>     SET SET TO LOCAL TO TRANSACTION;
>     SET foo TO quux;
>     end;
>
> Of course this last case also exists with my idea of a LOCAL SET
> command,
>
>     SET foo TO bar;
>     begin;
>     SET foo TO baz;
>     LOCAL SET foo TO quux;
>     -- presumably SHOW foo will show quux here
>     end;
>     -- does SHOW foo now show bar, or baz?
>
> Arguably you'd need to keep track of up to three values of a SET
> variable to make this work --- the permanent (pre-transaction) value,
> to roll back to if error; the SET value, which will become permanent
> if we commit; and the LOCAL SET value, which may mask the pending
> permanent value.  This seems needlessly complex though.  Could we get
> away with treating the above case as an error?
>
> In any case I find a LOCAL SET command more reasonable than making
> SET's effects depend on the value of a SETtable setting.  There is
> circular logic there.  If I do
>
>     begin;
>     SET SET TO LOCAL TO TRANSACTION;
>     end;
>
> what is the post-transaction behavior of SET?  And if you say LOCAL,
> how do you justify it?  Why wouldn't the effects of this SET be local?
>
>             regards, tom lane
>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
>



pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Folding variable.c into the GUC structure, redux
Next
From: "Marc G. Fournier"
Date:
Subject: Re: Vote totals for SET in aborted transaction