Обсуждение: returning value from inside a transaction
create table tez (i int);
insert into tez values(3);
create function tezt0(int) returns int as '
begin work;
lock table tez;
select * from tez as r;
commit work;
select tez.i;
' language 'sql';
select tezt0(1);
tezt0
-------
3
(1 row)
create function tezt1(int) returns timestamp as '
begin work;
lock table tez;
select now() as n;
commit work;
select n;
' language 'sql';
ERROR: Attribute 'n' not found
ok so it's a visibility error in my instance here but how can i get the
value returned from a function inside the transaction
a wrapper like this is the only way I can see to lock tables a 'plpgsql'
function updates.
"Functions and trigger procedures are always executed within a transaction
established by an outer query"
so how on earth do i do this and find out what my functions return!
TIA
Matt
On Wed, 12 Sep 2001, Matt wrote: > create table tez (i int); > insert into tez values(3); > > create function tezt0(int) returns int as ' > begin work; > lock table tez; > select * from tez as r; > commit work; > > select tez.i; > ' language 'sql'; It looks to me from testing reasonably recent sources that the above really isn't safe. Since we don't have nested transactions, that's not a separate transaction from whatever it's running in, but instead the begin will NOTICE if you're in a transaction and the commit will commit it and now you're no longer in a transaction... begin; select tezt0(4); insert into tez values (4); rollback; will end up with tez getting the row and a notice about the fact you weren't in a transaction from rollback. Is this really reasonable behavior?