我在 Postgres 日志中看到许多与特定应用程序的准备语句相关的相同错误。有多个应用程序使用同一数据库实例,但这些应用程序都没有出现问题。我不知道为什么会发生这种情况,也不知道我是否应该担心。从功能上来说,PHP 应用程序运行良好。
我有 pgbouncer 在数据库前面运行。
< 2017-03-23 05:15:01.663 CDT >ERROR: prepared statement "pdo_stmt_00000001" already exists
< 2017-03-23 05:15:01.663 CDT >STATEMENT: SELECT DISTINCT a0_.company_id AS company_uuid0, a0_.sub_source AS sub_source1, a0_.notification_body AS notification_body2, a0_.system_id AS system_id3 FROM action_item_notification a0_ WHERE a0_.delivered = false
< 2017-03-23 05:15:01.664 CDT >ERROR: prepared statement "pdo_stmt_00000001" does not exist
< 2017-03-23 05:15:01.664 CDT >STATEMENT: DEALLOCATE pdo_stmt_00000001
从 PgBouncer 1.21.0 开始,它现在支持名为准备好的语句的协议级别,这几乎肯定会解决此错误。您可以通过在 PgBouncer 的配置文件中将
max_prepared_statements
设置为非零值来打开此支持。有关详细信息,请查看文档:https://www.pgbouncer.org/config.html#max_prepared_statements