跟踪由单个 PHP 脚本调用引起的 Postgres 数据库 activity

Track Postgres database activity caused by a single PHP script invocation

是否可以从头开始跟踪数据库 activity,直到 PHP 脚本调用结束?

例如,假设我有一个脚本可以为数据库中的用户创建一条新记录。您填写表格,点击提交并提供所有数据有效脚本继续影响多个 tables 插入数据。

脚本向主用户插入数据table; (name, address, tel, etc...) 被返回一个新的 userid,然后也添加一个记录到部门 table (userid, departmentid) 和工资金额到工资单 table (userid , 工资).

有没有办法查看受脚本影响的所有 table、它们的使用顺序以及单次调用传递给它们的数据?

额外信息:我将 Ubuntu 14.04 LTS 与 Apache 2.4.7、PHP 5.5.9 和 Postgres 9.3.5 一起使用。我是这台机器的唯一用户;一切都将在本地运行。

最终我想设置脚本运行并观察它在 Postgres 数据库中的作用。

谢谢。

您可以在服务器端执行此操作,方法是设置 log_statement = 'all' 并设置合适的 log_line_prefix 以包括后端进程 ID、事务 ID 等。

您可能会发现在客户端连接字符串中设置 application_name 或在脚本中设置 SET application_name = 'blah' 很有用,这样在日志中也更容易找到。

请注意,您可以使用 ALTER USER blah SET log_statement = 'all' 在每个用户的基础上设置 log_statement,或者使用 ALTER DATABASE blah SET log_statement = 'all' 在每个数据库的基础上设置 log_statement。您可以稍后使用 ALTER ... RESET log_statement.

清除设置

使用 CSV 格式的日志也更容易。