我有一个 Django 5.x 应用程序。我一直在使用 psycopg2,现在正在尝试更新到 psycopg 3。这非常简单:我卸载了与 psycopg2 相关的所有内容并安装了
psycopg[binary]
。
但是,当我现在(并行)运行我的测试套件时,我突然遇到了以前没有遇到过的
connection timeout expired
错误!
我的数据库配置非常简单:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": get_from_env("DB_NAME", "my-db"),
"USER": get_from_env("DB_USERNAME", "my-db-user"),
"PASSWORD": get_from_env("DB_PASSWORD", DEFAULT_DB_PASSWORD),
"HOST": get_from_env("DB_HOSTNAME", "localhost"),
"PORT": get_from_env("DB_PORT", "5432"),
"OPTIONS": {
"connect_timeout": 3,
"options": f"-c statement_timeout=30000ms",
}
},
}
问题在于
connect_timeout
:如果我删除它,那么事情似乎就可以了。
psycopg 3 是否改变了连接的工作方式?为什么更新到 3.x 会导致更多连接超时?
这似乎是由于 psycopg 3.2 中的错误造成的。通过使用 psycopg 3.1,一切都会按预期进行。这里有一个关于该错误的 GitHub 问题:https://github.com/psycopg/psycopg/issues/888