PHP PDO 和 PostgreSQL 可能存在的错误

问题描述 投票:0回答:1

在 docker 应用程序启动时(使用 laravel php),对于 1 个请求,与数据库的连接正常。在第一个请求之后,我开始收到此错误。

SQLSTATE[08006] [7] could not send SSL negotiation packet: Resource temporarily unavailable (Connection: pgsql, SQL: (select * from ........)

使用:

  • Laravel v10 及以上版本。
  • PHP 8.3 及以上版本
  • Docker 与 Ubuntu 最新

我跟踪了这个问题,直到我发现 PDO 实际上没有打开与 PostgreSQL 的连接。我用 iptraf 以及 pg_connect 和 PDO 对其进行了测试。当我们使用 PDO 时,我们会收到上面的错误,但是当我尝试使用 pg_connect 时,我们可以连接甚至进行查询。

所以我的发现是,当使用 iptraf 时

  • 无法使用 PDO 打开连接
  • IPTraf 不显示使用 PDO 打开的连接
  • 我可以使用 pg_connect 打开连接
  • 我可以从数据库管理器应用程序打开连接
  • 发生在开发和生产环境中
php postgresql networking pdo
1个回答
0
投票

我想作为我的客户添加一些澄清信息,并且在

unattended-upgrades
将我们的 PHP 安装从
PHP 8.2.19
更新为
PHP 8.2.20

之后,我遇到了完全相同的问题

我们得出以下结论

  • PHP 8.1.x
    完全不受此问题的影响。我们创建了一个临时 php 脚本来连接到 Digital Ocean PostgreSQL 数据库,
    PHP 8.1
    已成功连接
  • PHP 8.2.20
    上的
    Ubuntu 22.04 LTS
    受此问题影响。上面描述的相同脚本不适用于
    PHP 8.2.20
  • 无法使用 Amazon 中针对 RDS 的完全相同的 PHP 安装来复制该问题
  • 连接到 Digital Ocean PostgreSQL 的 Laravel Herd Windows 安装上的
    PHP 8.2.20
    上未复制该问题
  • 在 Digital Ocean 中使用 Digital Ocean PostgreSQL 13、14、15 和 16 复制了该问题
  • 针对 Digital Ocean PostgreSQL 实例使用全新的 Laravel 安装,我们运行
    php8.2 artisan db
    并成功将 shell 放入 PostgreSQL
  • 我们注意到
    PHP 8.2.20
    内发生了 SSL 更改,但不知道这些是否相关
© www.soinside.com 2019 - 2024. All rights reserved.