gpt4 book ai didi

postgresql - 如何跟踪 PostgreSQL 日志中的事务?

转载 作者:行者123 更新时间:2023-11-29 11:14:04 27 4
gpt4 key购买 nike

我最近继承了一个使用 PostgreSQL 的应用程序,我一直在解决与在数据库中保存记录相关的问题。

我知道 PostgreSQL 允许我通过在 log_line_prefix 中包含特殊值 %x 来在日志中记录事务 ID。然而,我注意到,事务中出现的第一条语句总是记录为零。

如果我在psql中执行如下操作,

begin;
insert into numbers (1);
insert into numbers (2);
commit;

查询日志将包含以下条目:

2016-09-20 03:07:40 UTC 0 LOG:  statement: begin;
2016-09-20 03:07:53 UTC 0 LOG: statement: insert into numbers values (1);
2016-09-20 03:07:58 UTC 689 LOG: statement: insert into numbers values (2);
2016-09-20 03:08:03 UTC 689 LOG: statement: commit;

我的日志格式是%t %x,如您所见,第一个插入语句的事务ID是0,但是当我执行第二个插入语句时它变成了689。

谁能解释为什么在开始事务后 PostgreSQL 没有在第一条语句中记录正确的事务 ID?或者,如果我只是做错了,是否有更可靠的方法通过查看日志文件来识别哪些查询是单个事务的一部分?

最佳答案

事务 ID 在语句开始后分配,因此 log_statement 不会捕获它。 BEGIN 没有分配事务 ID,它被延迟到第一次写入操作。

改用虚拟 txid,它会立即分配。占位符是 %v。这些是立即分配的,但不是持久的并且是后端本地的。

我发现记录两者很有用。 txid 因为它最多匹配xminxmax 系统列内容等; vtxid 帮助我对事务中完成的操作进行分组。

关于postgresql - 如何跟踪 PostgreSQL 日志中的事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39585279/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com