statement_timeout doesnt work within plpgsql by design?

Started by Robert Treatalmost 19 years ago3 messages
#1Robert Treat
xzilla@users.sourceforge.net

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

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Robert Treat (#1)
Re: statement_timeout doesnt work within plpgsql by design?

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

#3Robert Treat
xzilla@users.sourceforge.net
In reply to: Tom Lane (#2)
Re: statement_timeout doesnt work within plpgsql by design?

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