使用 sqlalchemy 在 Postgresql 中指定“statement_timeout”?

Posted

技术标签:

【中文标题】使用 sqlalchemy 在 Postgresql 中指定“statement_timeout”?【英文标题】:Specify `statement_timeout` in Postgresql with sqlalchemy? 【发布时间】:2018-01-04 23:08:49 【问题描述】:

以下 statement_timeout 选项适用于某些 Postgresql 数据库和其他数据库,我得到 Unsupported startup parameter: options。为什么?

这可能是 Postgres 9.4 和 9.6 之间的区别吗?这适用于前者的服务器,而后者则失败。

from sqlalchemy import create_engine

# As is: Unsupported startup parameter: options
db_engine = create_engine("postgresql://user:pw@host/database",
    connect_args="options": "-c statement_timeout=1000")

with db_engine.connect() as db_connection:
    print("got it")

具体来说,我得到:

sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) ERROR:  Unsupported startup parameter: options

【问题讨论】:

psycopg2 2.7.1,SQLAlchemy 1.1.11,postgres 服务器 9.6.3。这似乎适用于运行 postgres 9.4.1 的另一台服务器,但问题可能不是 postgres 版本差异。 【参考方案1】:

您可能已经通过 PgBouncer 连接到这些数据库。

如果是这样,请将ignore_startup_parameters = options 添加到[pgbouncer] 部分下的pgbouncer.ini。

来自https://www.pgbouncer.org/config.html#ignore_startup_parameters:

默认情况下,PgBouncer 只允许它在启动数据包中跟踪的参数:client_encodingdatestyletimezonestandard_conforming_strings。所有其他参数都会引发错误。要允许其他参数,可以在此处指定,以便 PgBouncer 知道它们是由管理员处理的,它可以忽略它们。

默认:空

参考资料:

https://github.com/pgbouncer/pgbouncer/issues/295 https://github.com/pgbouncer/pgbouncer/issues/496

【讨论】:

以上是关于使用 sqlalchemy 在 Postgresql 中指定“statement_timeout”?的主要内容,如果未能解决你的问题,请参考以下文章

Postgresq9.6主从部署

PostgreSQ 连接问题 FATAL: no pg_hba.conf entry for host

如何在 SQLAlchemy 模型中使用 SQLAlchemy Utils

sqlalchemy使用及序列化

如何在 SQLAlchemy 中使用 UUID?

SQLAlchemy模型中的进程字段(使用flask_sqlalchemy)