如何查看POSTGRES执行的实际sql语句?

时间:2016-06-09 15:36:58

标签: postgresql

我想记录针对POSTGRES实例执行的实际sql语句。我知道我可以启用sql语句的日志记录。不幸的是,这不会记录实际的sql,而是记录解析的版本,其中某些参数被剥离并单独列出。

是否有可靠的方法将此输出重新组合成可执行的sql语句?

或者有没有办法拦截发送到postgres实例的sql,以便可以记录该sql?

我们希望能够将这些sql语句重播到另一个数据库。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

通过在postgresql.conf上设置log_statementall。见the documentation for runtime-config-logging

答案 1 :(得分:1)

实际上,PostgreSQL确实记录了执行的SQL。它不会剥离参数。相反,它不会插入它们,它会记录应用程序发送的内容,并将绑定参数分开。如果您的应用向sb = new StringBuilder (); 发送了绑定参数insert into x(a,b) values ($1, $2)42,那就是记录的内容。

没有记录选项可以将绑定参数插入查询字符串。

你的最后一行是关键部分。你根本不想要记录。您正在尝试通过日志执行基于语句的复制。由于易失性功能,18,每用户设置,序列分配顺序/间隙问题等原因,这将无法正常工作(如果有的话)。如果您想要复制,请不要尝试通过日志解析来完成。

如果您想尝试基于语句的复制,请查看PgPool-II。它的能力有限,并且有很多警告。