0

我有一个带有 bigserial PK 的表,一个字符变化 FK 和一个 bigint FK 以及对这些 FK 的唯一约束,一个字符变化 NOT NULL 和两个可为空的 smallint。

所有这些都运行在带有 Ubuntu 14.04.2 LTS、PHP 5.5.9 和 PostgreSQL 9.3 以及该发行版中的所有其他软件包的 VM 中。

我做了

$pdo->query("SELECT * FROM table")->fetchAll(PDO::FETCH_ASSOC)

$r = pg_query($db, "SELECT * FROM table");
pg_fetch_all($r)

后者返回所有行,而前者返回除一个之外的所有行。

我也尝试选择该行,虽然pg_*()函数按预期工作,但 PDO 没有返回任何行。

更奇怪的是,这种差异只出现在使用 lighttpd 1.4.33 的 PHP-FPM 中,但在 shell 中使用 PHP CLI 运行时不会出现。

怎么可能?有没有其他人遇到过类似的情况?我怎么能确定 PDO 不会再让我失望了?

我什至尝试重新启动 VM 并重新启动 PostgreSQL,但结果并没有改变。

可悲的是,我没有这些东西的备份,因为我必须尽快让事情正常工作,所以我删除了那个神秘的行并用一个新行替换它,除了 PK 之外的所有列都相同。

两者都正确返回了新行。

4

1 回答 1

0

事实证明,当 PostgreSQL 的索引损坏时,它可能会产生令人困惑和不一致的结果。

在这种情况下,只需重新创建索引并检查它是否可以解决您的问题。

于 2019-08-28T07:47:10.687 回答