postgresql - 获取 postgres 查询日志语句和持续时间作为一条记录
问题描述
我log_min_duration_statement=0
在配置中。
当我检查日志文件时,sql语句和持续时间被保存到不同的行中。(不知道我有什么问题,但声明和持续时间没有作为这个答案点一起保存)
据我了解session_line_num
,持续时间记录总是等于session_line_num + 1
相关声明,当然对于同一会话。
这个对吗?下面的查询是否可靠以正确获取一行中持续时间的语句?
(导入postgres_log
表格的csv日志):
WITH
sql_cte AS(
SELECT session_id, session_line_num, message AS sql_statement
FROM postgres_log
WHERE
message LIKE 'statement%'
)
,durat_cte AS (
SELECT session_id, session_line_num, message AS duration
FROM postgres_log
WHERE
message LIKE 'duration%'
)
SELECT
t1.session_id,
t1.session_line_num,
t1.sql_statement,
t2.duration
FROM sql_cte t1
LEFT JOIN durat_cte t2
ON t1.session_id = t2.session_id AND t1.session_line_num + 1 = t2.session_line_num;