Re: PL/pgSQL, RAISE and error context
От | Merlin Moncure |
---|---|
Тема | Re: PL/pgSQL, RAISE and error context |
Дата | |
Msg-id | CAHyXU0wcJ2EhEySwdQxzQFfXae35xLmeiKG_whdr39FjRRHXGA@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: PL/pgSQL, RAISE and error context (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: PL/pgSQL, RAISE and error context
|
Список | pgsql-hackers |
On Wed, Aug 21, 2013 at 9:22 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote: > Marko Tiikkaja <marko@joh.to> writes: >> By default, PL/pgSQL does not print the error context of a RAISE >> statement, for example: > > It used to do so, in the beginning when we first added context-printing. > There were complaints that the result was too verbose; for instance if you > had a RAISE NOTICE inside a loop for progress-monitoring purposes, you'd > get two lines for every one you wanted. I think if we undid this we'd > get the same complaints again. I agree that in complicated nests of > functions the location info is more interesting than it is in trivial > cases, but that doesn't mean you're not going to hear such complaints from > people with trivial functions. It *is* (apologies for the hijack) too verbose but whatever context suppressing we added doesn't work in pretty much any interesting case.What is basically needed is for the console to honor log_error_verbosity (which I would prefer) or a separate GUC in manage the console logging verbosity: set log_error_verbosity = 'terse'; SET CREATE OR REPLACE FUNCTION Notice(_msg TEXT) RETURNS VOID AS $$ BEGIN RAISE NOTICE '[%] %', clock_timestamp()::timestamp(0)::text, _msg; END; $$ LANGUAGE PLPGSQL; CREATE OR REPLACE FUNCTION foo() RETURNS VOID AS $$ BEGIN PERFORM Notice('test'); END; $$ LANGUAGE PLPGSQL; -- context will print postgres=# select foo(); NOTICE: [2013-08-21 09:52:08] test CONTEXT: SQL statement "SELECT Notice('test')" PL/pgSQL function foo() line 4 at PERFORM CREATE OR REPLACE FUNCTION bar() RETURNS VOID AS $$ SELECT Notice('test'); $$ LANGUAGE SQL; -- context will not print postgres=# select bar(); NOTICE: [2013-08-21 09:54:55] test -- context will print CREATE OR REPLACE FUNCTION baz() RETURNS VOID AS $$ select 0; SELECT Notice('test'); $$ LANGUAGE SQL; postgres=# select baz(); NOTICE: [2013-08-21 09:55:26] test CONTEXT: SQL function "baz" statement 2 merlin
В списке pgsql-hackers по дате отправления: