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

标签 postgresql

我想记录针对 POSTGRES 实例执行的实际 sql 语句。我知道我可以启用 sql 语句的日志记录。不幸的是,这并没有记录实际的 sql,而是一个经过解析的版本,其中删除了某些参数并单独列出。

是否有工具可以可靠地将此输出重构为可执行的 sql 语句?

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

我们希望能够针对另一个数据库重放这些 sql 语句。

感谢您的帮助!

最佳答案

实际上,PostgreSQL 会准确记录执行的 SQL。它不会去除参数。相反,它不会插入它们,而是记录应用程序发送的内容,绑定(bind)参数分开。如果您的应用使用绑定(bind)参数 4218 发送 insert into x(a,b) values ($1, $2),这就是记录的内容.

没有用于将绑定(bind)参数插入查询字符串的日志记录选项。

你的最后一行是关键部分。你根本不想记录。您正在尝试通过日志进行基于语句的复制。由于不稳定的函数、search_path、每个用户的设置、序列分配顺序/间隙问题等,这不会很好地工作(如果有的话)。如果您想要复制,请不要尝试通过日志解析来完成。

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

关于postgresql - 如何查看POSTGRES实际执行的sql语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37730442/

相关文章:

postgresql - 比较函数中的 postgresql 枚举

postgresql - Postgres 中的索引?

python - SQLAlchemy:获取每组最大 n 的平均值

sql - 选择所有使用别名的地方

python - 如何修复 'invalid syntax for type timestamp' Postgres?

sql - 如何创建一个有效的查询来按特定时间间隔计算记录?

database - Postgres 架构最佳实践

postgresql - 在 Heroku postgres 上设置语言环境

java - 有没有人做过查询 REAL 数据库的 FitNesse 测试?我无法使 Fitnesse 连接成功

sql - PostgreSQL 获取时间戳之间的时间差