Thread

  1. proposal: use errcontext for custom exception too

    Pavel Stehule <pavel.stehule@gmail.com> — 2011-11-24T17:30:03Z

    Hello
    
    There are small issue in PL/pgSQL and custom exceptions. Custom
    exception doesn't set a CONTEXT field. I propose change this behave
    for WARNING or EXCEPTION level. The goal is same behave for custom
    exception and builtin exception and it can help to identify a RAISE
    statement that is responsible to exception.
    
    
    ./pl_exec.c
    *** ./pl_exec.c.orig	2011-11-24 17:29:08.000000000 +0100
    --- ./pl_exec.c	2011-11-24 18:23:51.513136718 +0100
    ***************
    *** 2827,2833 ****
      	/*
      	 * Throw the error (may or may not come back)
      	 */
    ! 	estate->err_text = raise_skip_msg;	/* suppress traceback of raise */
    
      	ereport(stmt->elog_level,
      			(err_code ? errcode(err_code) : 0,
    --- 2827,2834 ----
      	/*
      	 * Throw the error (may or may not come back)
      	 */
    ! 	if (stmt->elog_level < WARNING)
    ! 		estate->err_text = raise_skip_msg;	/* suppress traceback of raise notice */
    
      	ereport(stmt->elog_level,
      			(err_code ? errcode(err_code) : 0,
    
    Regards
    
    Pavel Stehule
    
  2. Re: proposal: use errcontext for custom exception too

    Robert Haas <robertmhaas@gmail.com> — 2011-11-25T02:19:49Z

    On Thu, Nov 24, 2011 at 12:30 PM, Pavel Stehule <pavel.stehule@gmail.com> wrote:
    > There are small issue in PL/pgSQL and custom exceptions. Custom
    > exception doesn't set a CONTEXT field. I propose change this behave
    > for WARNING or EXCEPTION level. The goal is same behave for custom
    > exception and builtin exception and it can help to identify a RAISE
    > statement that is responsible to exception.
    
    That seems completely arbitrary.  I think we discussed before
    providing an option to allow the user to control this, which seems
    better than implementing some hardcoded rule that may or may not be
    what a given user wants.
    
    -- 
    Robert Haas
    EnterpriseDB: http://www.enterprisedb.com
    The Enterprise PostgreSQL Company
    
    
  3. Re: proposal: use errcontext for custom exception too

    Pavel Stehule <pavel.stehule@gmail.com> — 2011-11-25T06:14:56Z

    2011/11/25 Robert Haas <robertmhaas@gmail.com>:
    > On Thu, Nov 24, 2011 at 12:30 PM, Pavel Stehule <pavel.stehule@gmail.com> wrote:
    >> There are small issue in PL/pgSQL and custom exceptions. Custom
    >> exception doesn't set a CONTEXT field. I propose change this behave
    >> for WARNING or EXCEPTION level. The goal is same behave for custom
    >> exception and builtin exception and it can help to identify a RAISE
    >> statement that is responsible to exception.
    >
    > That seems completely arbitrary.  I think we discussed before
    > providing an option to allow the user to control this, which seems
    > better than implementing some hardcoded rule that may or may not be
    > what a given user wants.
    
    A some option via #option or GUC has sense for lower levels like
    NOTICE or WARNING. For exception level CONTEXT should be filled every
    time - usually you have a stack of CONTEXT calls, because exception
    must not be on direct call, but the last CONTEXT (where exception was
    created missing). It is confusing. When a advanced developer see a
    exception without CONTEXT, then he know so exception is related to
    RAISE statement, but still is not simple find a statement, that raised
    exception - the line number is missing.
    
    Compromise solution can be GUC where CONTEXT is default for ERROR level
    
    like plpgsql.log_context_error_level = ERROR
    
    A new option on RAISE STATEMENT is not well, usually you want to same
    behave on complete application.
    
    Regards
    
    Pavel
    
    >
    > --
    > Robert Haas
    > EnterpriseDB: http://www.enterprisedb.com
    > The Enterprise PostgreSQL Company
    >
    
    
  4. Re: proposal: use errcontext for custom exception too

    Robert Haas <robertmhaas@gmail.com> — 2011-11-25T13:31:55Z

    On Fri, Nov 25, 2011 at 1:14 AM, Pavel Stehule <pavel.stehule@gmail.com> wrote:
    > A some option via #option or GUC has sense for lower levels like
    > NOTICE or WARNING.
    
    I think what we discussed before was adding some bit of optional
    syntax to RAISE that would indicate that the user wants CONTEXT
    suppressed.
    
    -- 
    Robert Haas
    EnterpriseDB: http://www.enterprisedb.com
    The Enterprise PostgreSQL Company
    
    
  5. Re: proposal: use errcontext for custom exception too

    Tom Lane <tgl@sss.pgh.pa.us> — 2011-11-25T16:53:21Z

    Robert Haas <robertmhaas@gmail.com> writes:
    > On Thu, Nov 24, 2011 at 12:30 PM, Pavel Stehule <pavel.stehule@gmail.com> wrote:
    >> There are small issue in PL/pgSQL and custom exceptions. Custom
    >> exception doesn't set a CONTEXT field. I propose change this behave
    >> for WARNING or EXCEPTION level. The goal is same behave for custom
    >> exception and builtin exception and it can help to identify a RAISE
    >> statement that is responsible to exception.
    
    > That seems completely arbitrary.  I think we discussed before
    > providing an option to allow the user to control this, which seems
    > better than implementing some hardcoded rule that may or may not be
    > what a given user wants.
    
    Note also that the current behavior *is* what people want; at least,
    we have seen no field complaints about the lack of first-level CONTEXT
    for RAISE notices, and plenty of complaints from people who think
    there's still too much cruft automatically attached to RAISE output.
    If anything, what's been requested is a way to suppress even more
    context, not a policy decision to force more of it.
    
    			regards, tom lane
    
    
  6. Re: proposal: use errcontext for custom exception too

    Pavel Stehule <pavel.stehule@gmail.com> — 2011-11-25T17:49:08Z

    2011/11/25 Tom Lane <tgl@sss.pgh.pa.us>:
    > Robert Haas <robertmhaas@gmail.com> writes:
    >> On Thu, Nov 24, 2011 at 12:30 PM, Pavel Stehule <pavel.stehule@gmail.com> wrote:
    >>> There are small issue in PL/pgSQL and custom exceptions. Custom
    >>> exception doesn't set a CONTEXT field. I propose change this behave
    >>> for WARNING or EXCEPTION level. The goal is same behave for custom
    >>> exception and builtin exception and it can help to identify a RAISE
    >>> statement that is responsible to exception.
    >
    >> That seems completely arbitrary.  I think we discussed before
    >> providing an option to allow the user to control this, which seems
    >> better than implementing some hardcoded rule that may or may not be
    >> what a given user wants.
    >
    > Note also that the current behavior *is* what people want; at least,
    > we have seen no field complaints about the lack of first-level CONTEXT
    > for RAISE notices, and plenty of complaints from people who think
    > there's still too much cruft automatically attached to RAISE output.
    > If anything, what's been requested is a way to suppress even more
    > context, not a policy decision to force more of it.
    >
    
    People usually don't like verbose output in interactive mode in
    console. CONTEXT for RAISE NOTICE is not necessary.  If you have a
    small functions, then CONTEXT for RAISE EXCEPTION is not necessary
    too. But if you have a functions with hundreds lines, then more
    informations about origin of exception is welcome. There is workaround
    - with one statement function (RAISE stmt wrapper) I have a expected
    behave - but it's not clean RAISE EXCEPTION 'some message' is more
    readable than PERFORM elog('some message', ..) and log is not too
    readable too.
    
    postgres=# SELECT yyy();
    CONTEXT:  SQL statement "SELECT xxx()"
    PL/pgSQL function "yyy" line 3 at PERFORM
    
    I can understand to motivation decrease verbosity, but there is clean
    request "simply identification a source of exception (exception, not
    notification)". Some RAISE stmt option should be - but for NOTICE
    level NO_CONTEXT is optimal, and for EXCEPTION NO_CONTEXT is
    suboptimal. It has sense just for WARNING level.
    
    Regards
    
    Pavel