PostgreSQL记录SQL日志的参数有三个,如下,这三个参数都可以记录某种日志,也可以单独设置,也可以相互设置,因此情况比较多,某些情况下会生成一些奇怪的日志内容,需要弄清楚每一个参数的具体含义,有助于做出合理的配置
1,log_duration = on|off;
2,log_statement='none|ddl|mod|all';
3,log_min_duration_statement = N
log_duration
对于log_duration,这个参数仅仅是一个开关,决定是否记录所有SQL耗时的开关,记住是“是否记录所有SQL耗时的开关,不记录SQL语句本身”。
打开之后会记录所有SQL的执行的耗时,但不会记录SQL语句自身,所以日志文件中会记录到一些只有执行时间的奇怪的日志,
诸如此类:2025-08-01 06:25:38.391 CST [371967] user=postgres,db=db02,app=DBeaver 25.1.0 - Main ,host=123.*.*.186 LOG: duration: 0.042 ms
是的,没有弄错,该日志表明,某个SQL执行耗时0.042毫秒,只有这个信息,没有记录具体的SQL
该参数更多的是临时性调试的时候打开使用,而不能作为常规日志记录,这样会生成海量的日志,意义不大
log_statement
log_statement参数用于控制SQL语句日志记录的参数,主要用于审计和调试目的,该参数只记录符合参数的SQL语句本身,但不包括执行时间
1,none :不记录任何SQL语句(默认值)。
2,ddl:仅记录DDL语句:如CREATE、ALTER、DROP等。
3,mod:记录所有写入操作:包括INSERT、UPDATE、DELETE、TRUNCATE,以及所有DDL语句。
4,all:记录所有SQL语句,包括SELECT在内。
假设需要记录实例上的写入SQL,以及执行时间,那么需要打开log_durtion=on,并且设置log_statement='mod',这样就能记录下所有的写操作,以及执行时间
该参数更多的是记录某些特殊的审计日志,比如ddl日志,或者临时性记录某些日志,如果设置为all,会生成海量的日志
log_min_duration_statement
该参数是PostgreSQL的慢查询阈值,默认值是-1,也即不记录任何sql语句,如果打开这只,其单位是毫秒,就是说一旦某个SQL实践实践超过这个参数定义的值,就会被记录下来。该参数不依赖于log_duration,也即记录下来慢SQL的执行时间。
PostgreSQL中以上三个参数都可以记录某些SQL日志,在实际的使用过程中需要弄清楚其配置意义。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |