Redrock Postgres 文档
主页 切换暗/亮/自动模式 切换暗/亮/自动模式 切换暗/亮/自动模式 返回首页

预备语句

Psycopg 使用自动系统来管理预备语句。准备查询时,其解析和规划存储在服务端会话中,以便优化在同一连接(即使使用不同的参数)上后续执行的同一查询。

查询在连接上执行超过 prepare_threshold 次后会自动预备。psycopg将确保规划的语句数不超过prepared_max:如果执行进一步的查询,则释放最近最少使用的查询并释放关联的资源。

可以通过多种方式控制语句预备:

  • 您可以决定通过传递prepare=TrueConnection.execute()Cursor.execute()来立即进行预备查询。查询会进行预备处理(如果尚未进行预备),并按首次使用时预备好的方式执行。
  • 相反,传递prepare=Falseexecute() 将避免预备查询,无论执行查询的次数如何。参数的默认值为None,这意味着在满足上述条件时进行预备查询。
  • 通过将连接的prepare_threshold属性设置为None,可以禁用在连接上使用预备语句。

在 3.1 版本更改: 您也可以设置prepare_thresholdconnect() 方法的关键字参数。

PostgreSQL 文档 PREPARE 部分包含了有关 PostgreSQL 中预备语句的大量详细信息。

但请注意,Psycopg 不使用 SQL 语句(如PREPAREEXECUTE),而是使用协议级命令(如公开的PQsendPreparePQsendQueryPrepared接口)。

使用外部连接池程序(如 PgBouncer)与预备语句不兼容,因为同一客户端连接可能会更改它所引用的服务端会话。如果使用此类中间件,则应通过将 Connection.prepare_threshold 属性设置为None来禁用预备语句。