Re: Why doesn't `RAISE EXCEPTION` provide error context?

Поиск
Список
Период
Сортировка
От Pavel Stehule
Тема Re: Why doesn't `RAISE EXCEPTION` provide error context?
Дата
Msg-id CAFj8pRAVArRDLh2md+JAZVQJd39HDJ7SkjUsH365YYEgp10dGA@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Why doesn't `RAISE EXCEPTION` provide error context?  ("David G. Johnston" <david.g.johnston@gmail.com>)
Ответы Re: Why doesn't `RAISE EXCEPTION` provide error context?  ("David G. Johnston" <david.g.johnston@gmail.com>)
Список pgsql-general


2015-04-02 9:13 GMT+02:00 David G. Johnston <david.g.johnston@gmail.com>:
Adding "raw" content present on Nabble that gets filtered by the mailing list.

On Wednesday, April 1, 2015, Taytay <taylor@youneedabudget.com> wrote:
We make heavy use of `GET STACKED DIAGNOSTICS` to determine where errors
happened.
However, I am trying to use RAISE EXCEPTION to report errors, and have
discovered that RAISE is specifically prevented from adding to the error
context:

----
static void
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 talked more time about a change of this behave - the discus finished without end

http://www.postgresql.org/message-id/CAFj8pRDFHqv7cKXP-K+uBzW6627HytT7bct4ZxDBseLXc1Rcgg@mail.gmail.com

I am thinking, so current design is too simple and should be changed, and if will be a agreement I can add this patch to next commitfest.

Regards

Pavel
 
 

So that means that this doesn't work:



 RAISE EXCEPTION 'This exception will not get a stack trace';

EXCEPTION WHEN others THEN

    -- If the exception we're catching is one that Postgres threw,
    -- like a divide by zero error, then this will get the full
    -- stack trace of the place where the exception was thrown.
    -- However, since we are catching an exception we raised manually
    -- using RAISE EXCEPTION, there is no context/stack trace!
    GET STACKED DIAGNOSTICS v_error_stack = PG_EXCEPTION_CONTEXT;


I've posted more details here:
http://dba.stackexchange.com/questions/96743/postgres-how-to-get-stack-trace-for-a-manually-raised-exception

That context would be awfully useful for us, even for manually generated
exceptions.
Can anyone shed some light on A) why this is, and B) if it's still desired,
and C) if so, are there any workarounds? Is there an exception I can trick
Postgres into throwing that will include my user-generated string?

Many thanks for any help you can offer.


 

В списке pgsql-general по дате отправления:

Предыдущее
От: "David G. Johnston"
Дата:
Сообщение: Re: Why doesn't `RAISE EXCEPTION` provide error context?
Следующее
От: "David G. Johnston"
Дата:
Сообщение: Re: Why doesn't `RAISE EXCEPTION` provide error context?