Re: [HACKERS] logging statement levels - Mailing list pgsql-patches

From Andrew Dunstan
Subject Re: [HACKERS] logging statement levels
Date
Msg-id 4072A9A2.5010702@dunslane.net
Whole thread Raw
In response to Re: [HACKERS] logging statement levels  (Bruce Momjian <pgman@candle.pha.pa.us>)
Responses Re: [HACKERS] logging statement levels  (Bruce Momjian <pgman@candle.pha.pa.us>)
List pgsql-patches
Unless I'm missing something, this patch has the effect that with values
of "ddl" or "mod"  for log_statement, a statement with a parse error
will not be logged, which was what I hoped to avoid.

cheers

andrew



Bruce Momjian wrote:

>Andrew Dunstan wrote:
>
>
>>>>Here are some options:
>>>>
>>>>1. change the type of "log_statement" option from boolean to string,
>>>>with allowed values of "all, mod, ddl, none" with default "none".
>>>>2. same as 1. but make boolean true values synonyms for "all" and
>>>>boolean false values synonyms for "none".
>>>>3. keep "log_statement" option as now and add a new option
>>>>"log_statement_level" with the same options as 1. but default to "all",
>>>>which will have no effect unless "log_statement" is true.
>>>>
>>>>
>>>>
>>>>
>>>I like 1.
>>>
>>>
>
>OK, here is a patch that implements #1.  Here is sample output:
>
>    test=> set client_min_messages = 'log';
>    SET
>    test=> set log_statement = 'mod';
>    SET
>    test=> select 1;
>     ?column?
>    ----------
>            1
>    (1 row)
>
>    test=> update test set x=1;
>    LOG:  statement: update test set x=1;
>    ERROR:  relation "test" does not exist
>    test=> update test set x=1;
>    LOG:  statement: update test set x=1;
>    ERROR:  relation "test" does not exist
>    test=> copy test from '/tmp/x';
>    LOG:  statement: copy test from '/tmp/x';
>    ERROR:  relation "test" does not exist
>    test=> copy test to  '/tmp/x';
>    ERROR:  relation "test" does not exist
>    test=> prepare xx as select 1;
>    PREPARE
>    test=> prepare xx as update x set y=1;
>    LOG:  statement: prepare xx as update x set y=1;
>    ERROR:  relation "x" does not exist
>    test=> explain analyze select 1;;
>                                         QUERY PLAN
>    ------------------------------------------------------------------------------------
>     Result  (cost=0.00..0.01 rows=1 width=0) (actual time=0.006..0.007 rows=1 loops=1)
>     Total runtime: 0.046 ms
>    (2 rows)
>
>    test=> explain analyze update test set x=1;
>    LOG:  statement: explain analyze update test set x=1;
>    ERROR:  relation "test" does not exist
>    test=> explain update test set x=1;
>    ERROR:  relation "test" does not exist
>
>It checks PREPARE and EXECUTE ANALYZE too.  The log_statement values are
>'none', 'mod', 'ddl', and 'all'.  For 'all', it prints before the query
>is parsed, and for ddl/mod, it does it right after parsing using the
>node tag (or command tag for CREATE/ALTER/DROP), so any non-parse errors
>will print after the log line.
>
>
>


pgsql-patches by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: [HACKERS] logging statement levels
Next
From: Bruce Momjian
Date:
Subject: Re: [BUGS] COPY allows parameters which corrupt output