PostgreSQL 12.1 中的语句日志记录。与早期版本相比有什么变化吗?

Statement logging in PostgreSQL 12.1. Has something changed from earlier versions?

我正在调试一些使用 SQLAlchemy 与 PostgreSQL 数据库交互的代码。我看到的错误表明 PostgreSQL 正在接收我的 SQL 语句,但可能不是我想要的顺序。所以,我想我应该启用语句日志记录来查看 PostgreSQL 实际得到了什么。

几年前我使用

中的说明做过

How to log PostgreSQL queries?

而且效果很好。 (一定有,因为我对那个问题和接受的答案投了赞成票。)

然而,这可能与 PostgreSQL 9.x 有关。这次我使用 PostgreSQL 12.1。我将以下行添加到“/etc/postgresql/12/main/postgresql.conf”:

log_destination = 'stderr'
logging_collector = on
log_directory = '/tmp'
log_file_mode = 0777
log_min_duration_statement = 0
log_statement = 'all'

并重新启动了 PostgreSQL 服务器。日志文件已创建 ...

gord@gord-dv7-xubuntu0:~$ ll /tmp/postgresql-2019-12-18_115629.log 
-rw-rw-rw- 1 postgres postgres 632 Dec 18 11:56 /tmp/postgresql-2019-12-18_115629.log

...它包含一些条目...

gord@gord-dv7-xubuntu0:~$ cat /tmp/postgresql-2019-12-18_115629.log 
2019-12-18 11:56:30.478 MST [697] LOG:  database system was shut down at 2019-12-18 11:55:32 MST
2019-12-18 11:56:31.170 MST [689] LOG:  database system is ready to accept connections
2019-12-18 11:56:32.832 MST [743] postgres@template1 LOG:  statement: 
2019-12-18 11:56:32.832 MST [743] postgres@template1 LOG:  duration: 43.323 ms
2019-12-18 11:56:33.459 MST [749] postgres@template1 LOG:  statement: 
2019-12-18 11:56:33.459 MST [749] postgres@template1 LOG:  duration: 0.257 ms
2019-12-18 11:56:34.021 MST [755] postgres@template1 LOG:  statement: 
2019-12-18 11:56:34.021 MST [755] postgres@template1 LOG:  duration: 0.460 ms

...但是在 运行 几次查询之后 select 2+2; 以上是日志文件中出现的所有内容。

我还 运行 this answer 建议的 ALTER DATABASE 命令,即

ALTER DATABASE mydb SET log_statement = 'all';

并(再次)重新启动了服务器,但我仍然没有成功。

在较新版本的 PostgreSQL 中是否发生了某些未包含在上述答案中的更改?

编辑

正如对答案的评论中所指出的,这个特定的盒子上安装了 PostgreSQL 12.1 服务器 PostgreSQL 10.11 服务器。我正在编辑 12.1 的配置文件,但我的应用程序正在连接到 10.11。我使用的设置是正确的,它们只是应用于 postgresql.conf 的错误副本。

我认为没有任何改变。我在 12.1 中通过你的设置得到了这个:

2019-12-18 15:28:56.365 EST [20298] LOG:  statement: select 2+2;
2019-12-18 15:28:56.365 EST [20298] LOG:  duration: 0.373 ms
2019-12-18 15:28:57.409 EST [20298] LOG:  statement: select 2+2;
2019-12-18 15:28:57.409 EST [20298] LOG:  duration: 0.111 ms
2019-12-18 15:28:58.370 EST [20298] LOG:  statement: select 2+2;
2019-12-18 15:28:58.370 EST [20298] LOG:  duration: 0.163 ms

您使用什么客户端提交查询?也许您的客户检查了 SQL 并认为 select 2+2; 是愚蠢的并且不会按书面提交(但随后决定提交空白查询?)