Dic*_*ick 10 django postgresql psycopg2 pgbouncer
我正在使用PostgreSQL 9.1/PostGIS 1.5,psycopg2 2.4.2和pgbouncer 1.4.2运行Django 1.3.
在与数据库的每个连接上,我在pgbouncer.log中获得一个日志条目:
2011-11-20 02:15:25.027 29538 LOG S-0x96c2200:app_db/postgres@192.168.171.185:5432关闭因为:unclean server(age = 0).
我找不到任何解决这个问题的方法 - 任何人都知道为什么?我已经尝试重新配置pgbouncer(会话/事务模式,不同的超时等),但无济于事.
Dic*_*ick 16
好吧,我想我已经弄明白了.问题在于Django和Psycopg2长期存在的问题.基本上,Psycopg2会自动向DB发出BEGIN语句.但是,如果Django认为没有发生数据修改,它将不会在事务结束时发出COMMIT.
有一些解决这个问题的方法,请查看http://www.slideshare.net/OReillyOSCON/unbreaking-your-django-application了解更多详情.理想情况下,您关闭自动提交(通过在数据库设置中设置autocommit = True,笨拙的命名约定).这可以防止只读函数上的事务,也可以防止写函数上的事务,因此您需要在@commit_on_success装饰器中手动包装这些函数.
或者,只需将django.middleware.transaction.TransactionMiddleware添加到您的Middleware类中.这将包装事务中的每个请求.这意味着在事务中也不必要地包装只读请求,但这是一个快速而肮脏的解决方案.
| 归档时间: |
|
| 查看次数: |
3991 次 |
| 最近记录: |