Django ORM与PostgreSQL连接限制

3 投票
1 回答
2955 浏览
提问于 2025-04-16 00:01

我在用Django做一个项目,数据库是Postgresql 8.1.21(用的是Django 1.1.1,Python2.5,psycopg2,还有Apache2和mod_wsgi 3.2)。最近遇到了一个很烦人的错误:

OperationalError: FATAL: connection limit exceeded for non-superusers

这个问题不是我一个人碰到的。网上有很多关于这个错误的讨论,尤其是和psycopg有关的,但大部分讨论都是针对旧版本的Django,或者提供的解决方案需要修改Django的代码。我还没找到一个简单明了的办法来解决Django ORM(或者说psycopg,具体哪个负责还不太清楚)留下的Postgre连接没有关闭的问题。

在每个视图的最后加上connection.close(),能解决这个问题吗?更好的是,有没有人彻底解决过这个问题,把这个错误打败了?

编辑:我们后来把Postgresql的连接限制提高到500个,这样虽然避免了这个错误,但却导致了内存使用过高。

1 个回答

1

这可能是由其他原因引起的。例如,配置Apache/mod_wsgi时,可能设置得理论上可以同时处理比数据库实际能处理的更多请求。你有没有检查过你的Apache/mod_wsgi配置,看看最大客户端的限制是否和PostgreSQL的限制相比较,确保没有出现这种情况?当然,这个前提是你在Apache中确实达到了那个限制,并且还取决于数据库连接池的设置。

撰写回答