У меня была таблица с bigserial PK, один символ, различающийся FK и bigint FK, и уникальное ограничение для этих FK, символ, не имеющий NULL, и два элемента с нулевыми значениями.
Все это выполнялось на виртуальной машине с 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)
Последний возвращал все строки, в то время как первый возвращал все строки, кроме одного.
Я также попытался выбрать ту самую строку, и в то время как функции pg_*()
работали должным образом, PDO не возвращал строку.
Чтобы сделать его еще более странным, расхождение появилось только в PHP-FPM с помощью lighttpd 1.4.33, но не при запуске с PHP CLI в оболочке.
Как это может быть? Кто-нибудь еще сталкивался с подобной ситуацией? И как я могу быть уверен, что PDO не подведет меня снова?
Я даже попытался перезагрузить VM и перезапустить PostgreSQL, но результаты не изменились.
К сожалению, у меня нет резервной копии этого материала, потому что я должен был заставить все работать как можно скорее, поэтому я удалил эту загадочную строку и заменил ее на новую, идентичную во всех столбцах, кроме PK.
Новая строка была правильно возвращена обоими.