首页 > 解决方案 > 获取 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;

标签: postgresqlpostgresql-11

解决方案


推荐阅读