【发布时间】:2016-09-20 03:30:56
【问题描述】:
我最近继承了一个使用 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?或者如果我只是做错了,有没有更可靠的方法可以通过查看日志文件来识别哪些查询是单个事务的一部分?
【问题讨论】: