【发布时间】:2018-08-16 09:24:25
【问题描述】:
我正在尝试查找在我们的生产服务器上不时发生的错误,但无法以其他方式重现:数据库中的某些值以我不希望的方式更改。
我可以编写一个 PostgreSQL 触发器,如果发生此错误,该触发器将触发,并从所述触发器引发异常。我会看到执行不需要的 SQL 语句的 Python 回溯。
但在这种情况下,我不想停止处理请求。
有没有办法从 PostgreSQL 触发器中记录 Python/Django 回溯?
我知道这不是微不足道的,因为 DB 代码在具有不同用户 ID 的不同 linux 进程下运行。
我正在使用 Python、Django、PostgreSQL、Linux。
我想这并不容易,因为 DB 触发器在与 python 解释器不同的上下文中运行。
如果您需要更多信息,请询问。
更新
一种解决方案可能是覆盖 psycopg2 的 connection.notices。
【问题讨论】:
-
你在
except块中尝试过logger.exception()吗? -
您可以
RAISE NOTICE ...代替引发异常,这不会中止当前事务。不知道如何将 python 堆栈跟踪包含到消息正文中。数据库事件是另一种可能性,但这需要更多的工具。 -
@joop 困难的部分是如何从 postgres 中获取 python 堆栈跟踪。
-
不清楚:
I would see the Python traceback which executes the unwanted SQL statement.你在PL/Python中有触发函数? -
@joop 到目前为止,我没有执行 pl/pythonu,但如果需要,我可以这样做。
标签: python django postgresql