在PostgreSQL触发器中记录Python的Stacktrace

gue*_*tli 8 python django postgresql

我试图找到一个在我们的生产服务器上不时发生的错误,但是无法以其他方式再现:数据库中的某些值会以我不想要的方式改变.

我可以编写一个PostgreSQL触发器,如果​​发生此错误则会触发,并从所述触发器引发异常.我会看到执行不需要的SQL语句的Python回溯.

但在这种情况下,我不想停止处理请求.

有没有办法从PostgreSQL触发器中记录Python/Django回溯?

我知道这不是真的,因为DB代码在不同的用户ID的不同linux进程下运行.

我使用的是Python,Django,PostgreSQL,Linux.

我想这并不容易,因为DB触发器在与python解释器不同的上下文中运行.

请询问您是否需要进一步的信息.

joo*_*oop 3

Is there a way to log the Python/Django traceback from within a PostgreSQL trigger?
Run Code Online (Sandbox Code Playgroud)

不,那里没有

  • (SQL) 查询在DBMS 服务器上执行,触发器内的代码也是如此
  • Python 代码在客户端上执行,这是一个不同的进程,可能由不同的用户执行,甚至可能在不同的机器上执行。

服务器(检测情况)和客户端(需要执行堆栈转储)之间的唯一连接是已连接的套接字。您可以尝试通过某种状态代码来扩展服务器的回复(如果有的话),客户端使用该状态代码来 stackddump 本身。仅当触发器是当前事务的一部分而不是某些不相关进程的一部分时,这才有效。

另一种方法是:大量记录。让 DBMS 将每个提交的 SQL 写入其日志文件。这可能会导致大量日志条目,您必须对其进行检查。