跟踪单个PHP脚本调用导致的Postgres数据库活动
是否可以从PHP脚本调用的开始到结束跟踪数据库活动 例如,假设我有一个脚本,它在数据库中为用户创建一个新记录。填写表单,点击submit,如果所有数据都有效,脚本将继续影响插入数据的多个表 脚本将数据插入主用户表;(姓名、地址、电话等)返回一个新的用户ID,然后还向部门表(用户ID、部门ID)添加一条记录,并向工资表(用户ID、工资)添加工资金额 是否有办法查看受脚本影响的所有表、它们的使用顺序以及为单个调用传递给它们的数据 额外信息:我将Ubuntu 14.04 LTS与Apache2.4.7、PHP5.5.9和Postgres9.3.5一起使用。我是这台机器的唯一用户;一切都将在本地运行 最后,我想让脚本运行起来,并观察它在Postgres DB中的作用跟踪单个PHP脚本调用导致的Postgres数据库活动,php,logging,monitoring,psql,postgresql-9.3,Php,Logging,Monitoring,Psql,Postgresql 9.3,是否可以从PHP脚本调用的开始到结束跟踪数据库活动 例如,假设我有一个脚本,它在数据库中为用户创建一个新记录。填写表单,点击submit,如果所有数据都有效,脚本将继续影响插入数据的多个表 脚本将数据插入主用户表;(姓名、地址、电话等)返回一个新的用户ID,然后还向部门表(用户ID、部门ID)添加一条记录,并向工资表(用户ID、工资)添加工资金额 是否有办法查看受脚本影响的所有表、它们的使用顺序以及为单个调用传递给它们的数据 额外信息:我将Ubuntu 14.04 LTS与Apache2.4.7
谢谢。您可以在服务器端执行此操作,方法是设置
log\u statement='all'
并设置适当的log\u line\u前缀以包括后端进程ID、事务ID等
您可能会发现在客户端连接字符串中设置application\u name
,或者在脚本中设置set application\u name='blah'
,这样在日志中也更容易找到
请注意,您可以使用ALTER user blah set log_statement='all'
按每个用户设置log_语句
,或者使用ALTER database blah set log_statement='all'
按每个数据库设置。您可以稍后使用ALTER。。。重置日志\u语句
使用CSV格式的日志也更容易。我要做的是在脚本中添加某种SQL记录器,以捕获提交到数据库的所有查询。记录器接收查询并存储它们,然后将查询发送到要执行的数据库。我不是很熟悉博士后,但可能有一个审计工具。但它可能只显示一个连接id或其他东西作为查询的源,这不会有很大帮助,因为DB不关心或跟踪查询来自何处Yes@LuckyBurger,这当然是一个选项-一位同事还建议我可以在日志文件上运行tail-f,这可能也会提供一些有用的输出。我试图避免用与功能无关的代码弄脏我的脚本。谢谢你的意见。是的,除了在你的体系结构中添加日志层之外,我真的想不出任何其他的方法。祝你好运谢谢@craig ringer,这不仅回答了我当前的问题,还让我深入了解了PostgreSQL的其他可用设置,并允许我仅为一个用户隔离日志记录,这将非常有用,特别是当我在日志记录方面遇到问题时,会减慢其他用户的查询速度。非常感谢。