python - 通过 PostgreSQL 触发器记录当前 Python 解释器的 Stacktrace

标签 python django postgresql

我试图找到一个错误,该错误在我们的生产服务器上不时发生,但无法以其他方式重现:数据库中的某些值以我不希望的方式更改。

我可以编写一个 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/

相关文章:

Django模型翻译: store translations in database or use gettext?

java - 有没有一种方法可以使用嵌入式数据库来测试 Postgres Jsonb 查询以进行单元测试?

python - lpsolve - 每次更改约束顺序时结果都会不同

将特定列写入输出文件然后在 Excel 中打开时出现 Python CSV 格式问题

python - Django 休息框架保存缩略图

python - “marque_id” 列中的空值违反了非空约束 - Django 2.1.7

python - 使用来自 django shell 的 pandas 在 Django 中批量创建

python - 如何在没有管理员权限的情况下激活 Python 虚拟环境?

Django - 搜索匹配所有对象 - 即使它们实际上不匹配

postgresql - 有没有办法在 Postgres 中禁用函数重载