我有一个带有bigserial PK的表,一个字符有不同的FK和一个bigint FK以及这些FK的唯一约束,一个字符变化NOT NULL和两个可空的smallint。
所有这些都是在运行Ubuntu 14.04.2 LTS,PHP 5.5.9和PostgreSQL 9.3的虚拟机以及分发中的所有其他软件包中运行的。
我做了
$pdo->query("SELECT * FROM table")->fetchAll(PDO::FETCH_ASSOC)
和
$r = pg_query($db, "SELECT * FROM table");
pg_fetch_all($r)
后者返回所有行,而前者返回除1之外的所有行。
我也尝试选择那一行,虽然pg_*()
函数按预期工作,但PDO没有返回任何行。
为了使它更加奇怪,这种差异只出现在使用lighttpd 1.4.33的PHP-FPM中,而不是在shell中使用PHP CLI运行时。
怎么会这样? 有没有其他人遇到类似的情况? 我怎么能确定PDO不会再次让我失望?
我甚至尝试重新启动VM并重新启动PostgreSQL,但结果没有改变。
可悲的是,我没有对这些东西的备份,因为我必须尽快让事情工作,所以我删除了那个神秘的行并用一个新的替换它,除了PK之外的所有列都相同。
两者都正确地返回了新行。
答案 0 :(得分:0)
结果证明,当PostgreSQL的索引损坏时,PostgreSQL可能会产生令人困惑和不一致的结果。
在这种情况下,只需重新创建索引并检查它是否可以解决您的问题。