这个其实并不难。
但是这里通过实验说明一个问题。就是与MySQL个别情况的对比。
SELECT name,setting,vartype,boot_val,reset_val FROM pg_settings
where name in('logging_collector','log_destination','log_directory','log_filename');

上图是查日志输出的目录和文件名。
下面的才是看你有没有开。
SELECT name,setting,vartype,boot_val,reset_val FROM pg_settings
where name in ('log_statement','log_min_duration_statement');

这里这个log_statement是none就是没开。
上面的最小执行语句log_min_duration_statement -1是不限制不记录的意思。单位是毫秒。
接下来我们要改配置文件了,到这里和MySQL大体一样。MySQL的是修改配置文件重启生效。
或者你直接set global slow_query_log=on;以及set global long=1;这样操作以后是后续连接会话才会生效。当前不生效。而且一旦重启就都采用my.cnf的参数了。所以稳妥起见,通常都是命令先改。同时my.cnf也改,防止重启还原。之所以这样是因为不停机生效。遇到意外宕机重启也不会被冲刷掉。
PG也可以这样改。不过我推荐是改参数文件,然后PG的特点是不停机重新加载这个文件生效。
conf文件添加。
log_statement = all #需设置跟踪所有语句,否则只能跟踪出错信息 log_min_duration_statement = 1000 #milliseconds,记录执行1秒及以上的语句
select pg_reload_conf();

可见已经改好了。
测试一下。

MYSQL是select sleep(2);
PG的语法如上。
接下来看日志。


注意我之前用MySQL的语法打的错误的也记录了。
本来没有了,但是我经历过MySQL把slowlog移动走后,慢日志不记录的事情。那么看看PG怎么处理?
改名字。


后面再执行,我看没有新生成日志,我以为也不会记录了。那么就改回来吧。也就是说我第二个2秒的没记录,应该只记录了一个2秒和一个4秒。

但是实测发现。都记录了,也就是说,我改了名字后他虽然没有新生产,但是他在改名字的文件上去追加了。





