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;
是愚蠢的并且不会按书面提交(但随后决定提交空白查询?)
我正在调试一些使用 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;
是愚蠢的并且不会按书面提交(但随后决定提交空白查询?)