我试图找到一个错误,该错误在我们的生产服务器上不时发生,但无法以其他方式重现:数据库中的某些值以我不希望的方式更改。
我可以编写一个 PostgreSQL 触发器,如果发生此错误,它会触发,并从所述触发器中引发异常。我会看到执行不需要的 SQL 语句的 Python 回溯。
但在这种情况下,我不想停止请求的处理。
有没有办法从 PostgreSQL 触发器中记录 Python/Django 回溯?
我知道这并不简单,因为数据库代码在具有不同用户 ID 的不同 Linux 进程下运行。
我正在使用 Python、Django、PostgreSQL、Linux。
我想这并不容易,因为数据库触发器运行在与 python 解释器不同的上下文中。
请询问您是否需要更多信息。
更新
一个解决方案可能是覆盖 connection.notices psycopg2.
最佳答案
Is there a way to log the Python/Django traceback from within a PostgreSQL trigger?
没有,没有
- (SQL) 查询在 DBMS-server 上执行,触发器内的代码也是如此
- Python 代码在客户端 上执行,这是一个不同的进程,可能由不同的用户执行,甚至可能在不同的机器上执行。
服务器(检测条件)和客户端(需要执行堆栈转储)之间的唯一连接是已连接的套接字。您可以尝试通过一些状态代码来扩展服务器的回复(如果有的话),客户端使用它来 stackddump 本身。这仅在触发器是当前事务的一部分时才有效,而不是一些不相关的过程。
另一种方式是:大量日志记录。让 DBMS 将每个 提交的 SQL 写入其日志文件。这可能会导致大量日志条目,您必须检查这些条目。
关于python - 通过 PostgreSQL 触发器记录当前 Python 解释器的 Stacktrace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51873708/