Обсуждение: statement_timeout doesnt work within plpgsql by design?

Поиск
Список
Период
Сортировка

statement_timeout doesnt work within plpgsql by design?

От
Robert Treat
Дата:
pagila=# select version();                          version
-------------------------------------------------------------PostgreSQL 8.2.3 on i386-pc-solaris2.10, compiled by cc
-Xa
(1 row)

pagila=# create or replace function test() returns bool as $$ begin set 
statement_timeout = 3000; perform pg_sleep(4) ; return true; end $$ language 
plpgsql;
CREATE FUNCTION
pagila=# select test();test
------t
(1 row)

pagila=# select test();
ERROR:  canceling statement due to statement timeout
CONTEXT:  SQL statement "SELECT  pg_sleep(4)"
PL/pgSQL function "test" line 1 at perform


is this behavior by design?  if so why would you design it that way? :-) 

-- 
Robert Treat
Build A Brighter LAMP :: Linux Apache {middleware} PostgreSQL


Re: statement_timeout doesnt work within plpgsql by design?

От
Tom Lane
Дата:
Robert Treat <xzilla@users.sourceforge.net> writes:
> pagila=# create or replace function test() returns bool as $$ begin set 
> statement_timeout = 3000; perform pg_sleep(4) ; return true; end $$ language 
> plpgsql;
> CREATE FUNCTION

statement_timeout is measured across an entire interactive command, not
individual commands within a function; and the timeout that applies to
an interactive command is determined at its beginning.  So the above
doesn't do what you think.
        regards, tom lane


Re: statement_timeout doesnt work within plpgsql by design?

От
Robert Treat
Дата:
On Tuesday 20 February 2007 12:50, Tom Lane wrote:
> Robert Treat <xzilla@users.sourceforge.net> writes:
> > pagila=# create or replace function test() returns bool as $$ begin set
> > statement_timeout = 3000; perform pg_sleep(4) ; return true; end $$
> > language plpgsql;
> > CREATE FUNCTION
>
> statement_timeout is measured across an entire interactive command, not
> individual commands within a function; and the timeout that applies to
> an interactive command is determined at its beginning.  So the above
> doesn't do what you think.
>

Well, I'd be happy if it caused the entire function to bail out or if it 
caused individual statements within a function to bail out, but it does 
neither.  I can see how that would be a bit tricky to implement though. 

-- 
Robert Treat
Build A Brighter LAMP :: Linux Apache {middleware} PostgreSQL