Duration logged but not the statement — postgresql

2020-02-07 05:41发布

I have the following setting in my postgresql.conf

log_statement='all'
log_duration=on

When I run psql, and run any query like select/create user/ etc, it logs the statement as well as the duration. If I give the query to connect to a different database

\c <database_name>

it logs neither the duration nor the statement. I thought it might not log duration and statement for meta-commands that starts with a backslash. But it does log the statement and duration for some of them, like \dt \l.

I think there might be a list of queries/commands, for which log will be generated or not. is there any such list?

Having said that, the original issue, that led me to dig this is --

My application (golang-react application) interacts with postgresql and logs statement and its duration. But after that it logs two more durations, whose statement is not printed. (I have commented log_min_duration_statement), so I'm not sure what queries, this duration is for. Also if I do SELECT query,xact_start,query_start FROM pg_stat_activity; at that time to see the running queries,it does not show any other query than the one which I see in the logs.

How can I know which queries is this duration for?

1条回答
ら.Afraid
2楼-- · 2020-02-07 06:25

But after that it logs two more durations, whose statement is not printed.

These are probably the parse, bind and execute durations for the three phases of statement execution, if you have log_duration = on. It's only done in three phases via client applications - psql runs in a single go.

If you just want the total, use log_min_duration_statement = 0 instead.

Yes, that's confusing. Maybe it's worth writing it up and submitting it as a usability problem report to pgsql-general.

查看更多
登录 后发表回答