From: | Dan S <strd911(at)gmail(dot)com> |
---|---|
To: | Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> |
Cc: | pgsql-general(at)postgresql(dot)org, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Subject: | Re: Bug in GET STACKED DIAGNOSTICS ? |
Date: | 2012-12-11 21:22:10 |
Message-ID: | CAPpdapePv=6ObpEkvGrB1Avfp3i2PVQXEzBA7UW0DnBVDT+L8w@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
I got another unexpected behaviour of the call stack by this invocation :
select testfunc2(true) from generate_series(1,10);
The first call stack is different from the nine folllowing.
Shouldn't it be identical to the others ?
Best Regards
Dan S
2012/12/11 Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
> Hello
>
> 2012/12/10 Dan S <strd911(at)gmail(dot)com>:
> > Hi !
> >
> > I'm running "PostgreSQL 9.2.2 on i686-pc-linux-gnu, compiled by gcc
> > (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 32-bit" on ubuntu 12.04 .
> >
> > I'm a bit perplexed by the difference in PG_EXCEPTION_CONTEXT of the
> > following two invocations of a function where I try to get the call
> stack.
> > Is this expected behaviour ?
> >
> > First invocation (This is the one where I get the expected notification):
> >
> > select * from testfunc2(true);
> >
> > NOTICE: PL/pgSQL function testfunc(boolean) line 8 at assignment
> > PL/pgSQL function testfunc2(boolean) line 6 at RETURNs
> >
> >
> > Second invocation (I did expect two rows of callstack here also but I
> only
> > got one):
> >
> > select * from testfunc2(false);
> >
> > NOTICE: PL/pgSQL function testfunc2(boolean) line 6 at RETURNs
> >
>
> It is feature, not e bug - although I don't sure what is sense of this
> feature.
>
> plpgsql_exec_error_callback(void *arg)
> {
> PLpgSQL_execstate *estate = (PLpgSQL_execstate *) arg;
>
> /* if we are doing RAISE, don't report its location */
> if (estate->err_text == raise_skip_msg)
> return;
>
> we don't attach context for RAISE statement.
>
> Regards
>
> Pavel Stehule
>
> > The functions:
> >
> > CREATE OR REPLACE FUNCTION testfunc( div_by_zero boolean )
> > RETURNS text AS
> > $BODY$
> > DECLARE
> > td text;
> > i int = 0;
> > BEGIN
> > BEGIN
> > IF div_by_zero THEN
> > i = 1/i;
> > ELSE
> > RAISE EXCEPTION 'an exception';
> > END IF;
> > EXCEPTION WHEN raise_exception OR division_by_zero THEN
> > GET STACKED DIAGNOSTICS td = PG_EXCEPTION_CONTEXT;
> > RAISE NOTICE '%s',td;
> > END;
> > RETURN td::text;
> > END;
> > $BODY$
> > LANGUAGE plpgsql;
> >
> >
> > CREATE OR REPLACE FUNCTION testfunc2(div_by_zero boolean)
> > RETURNS text AS
> > $BODY$
> > DECLARE
> > td text;
> > i int = 0;
> > BEGIN
> > return testfunc(div_by_zero);
> > END;
> > $BODY$
> > LANGUAGE plpgsql;
> >
> >
> > Best Regards
> > Dan S
> >
>
From | Date | Subject | |
---|---|---|---|
Next Message | David Boreham | 2012-12-11 21:28:36 | Re: large database |
Previous Message | Mihai Popa | 2012-12-11 21:03:27 | Re: large database |