Rya*_*der 6 postgresql sqlalchemy
我有下一个错误日志
ERROR - 2020-04-22 09:32:38,508 - sqlalchemy.pool.impl.QueuePool: Exception during reset or similar
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 693, in _finalize_fairy
fairy._reset(pool)
File "/usr/local/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 880, in _reset
pool._dialect.do_rollback(self)
File "/usr/local/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 538, in do_rollback
dbapi_connection.rollback()
psycopg2.errors.IdleInTransactionSessionTimeout: terminating connection due to idle-in-transaction timeout
SSL connection has been closed unexpectedly
Run Code Online (Sandbox Code Playgroud)
对原因以及如何解决有什么想法吗?
根本原因是您的数据库会话已使用 BEGIN 启动事务,但不活动的时间长于 PostgreSQL 参数idle_in_transaction_session_timeout(在 PG 实例级别定义):
idle_in_transaction_session_timeout (integer)
Terminate any session with an open transaction that has been idle for longer than the specified duration in milliseconds. This allows
any locks held by that session to be released and the connection slot
to be reused; it also allows tuples visible only to this transaction
to be vacuumed. See Section 24.1 for more details about this.
The default value of 0 disables this feature.
Run Code Online (Sandbox Code Playgroud)
要解决此问题,您需要修复应用程序代码以防止空闲事务过长,或者修改 PG 参数idle_in_transaction_session_timeout。
我的情况是,我的会议没有正确关闭。
我已经用类似的结构重写了所有代码
session = init_session()
try:
... # business logic with other calls and raise-s
session.commit() # optional
finally:
session.close()
Run Code Online (Sandbox Code Playgroud)
然后问题就消失了
| 归档时间: |
|
| 查看次数: |
21941 次 |
| 最近记录: |