proposal: enhanced stack trace for PL - print param args

Started by Pavel Stehulealmost 9 years ago2 messages
#1Pavel Stehule
pavel.stehule@gmail.com

Hi

In last discussion related to PLpgSQL was mentioned weak of stack trace
PLpgSQL. The function parameters are not printed.

CREATE OR REPLACE FUNCTION public.foo(a double precision, b double
precision)
RETURNS double precision
LANGUAGE plpgsql
AS $function$
begin
return 100/a;
end;
$function$

Current:

postgres=# select foo(0, 100);
ERROR: division by zero
CONTEXT: PL/pgSQL function foo(double precision) line 3 at RETURN

Proposed result:
postgres=# select foo(0, 100);
ERROR: division by zero
CONTEXT: PL/pgSQL function foo(double precision) line 3 at RETURN
ARGUMENTS: a=0, b=100

* only function parameters are printed - no local parameters
* the line of arguments will be limited - X chars ?
* the content of variable should be limited - X chars ? - maybe 40 chars

This function can has impact on performance - so it should be explicitly
enabled with some GUC - like extra_back_trace or some similar. Probably
before any call the function parameters and related out functions should be
copied to safe memory context. More it can increase press on Error Memory
Context and possibly on log size.

Is a interest about this feature? Comments, notes?

Regards

Pavel

#2Corey Huinker
corey.huinker@gmail.com
In reply to: Pavel Stehule (#1)
Re: proposal: enhanced stack trace for PL - print param args

On Sun, Jan 15, 2017 at 1:27 AM, Pavel Stehule <pavel.stehule@gmail.com>
wrote:

Hi

Proposed result:
postgres=# select foo(0, 100);
ERROR: division by zero
CONTEXT: PL/pgSQL function foo(double precision) line 3 at RETURN
ARGUMENTS: a=0, b=100

+1 This would be useful in cases where an app calls one procedure and then
disconnects. It's hard to know which of the thousands of invocations caused
the error.

* only function parameters are printed - no local parameters

+1, we'd have no insight into variables inside the function anyway.

* the line of arguments will be limited - X chars ?

+1

* the content of variable should be limited - X chars ? - maybe 40 chars

This function can has impact on performance - so it should be explicitly
enabled with some GUC - like extra_back_trace or some similar. Probably
before any call the function parameters and related out functions should be
copied to safe memory context. More it can increase press on Error Memory
Context and possibly on log size.

func_args_back_trace?