<?php
$c = pg_connect( $connectionString, PGSQL_CONNECT_FORCE_NEW );
$queries = array (
"SELECT COUNT(*) AS data FROM articles",
"SELECT * FROM posts WHERE visible = TRUE",
"SELECT * FROM countries WHERE visible = FALSE",
"SELECT * FROM types WHERE visible = TRUE"
);
foreach ( $queries as $query ) {
$res = @pg_query( $c, $query );
if ( empty( $res ) ) {
echo "[ERR] " . pg_last_error( $c ) . "\n";
} else {
echo "[OK]\n";
}
}
Фрагмент приведенного выше кода впервые генерирует это:
[OK]
[OK]
[OK]
[OK]
но во второй раз это:
[OK]
[OK]
[ERR] server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
[ERR] server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Это означает, что некоторые кэшированные запросы вызывают проблемы. Мы пытались изменить порядок запросов, но это не помогло. Только простые запросы, такие как SELECT 1+8
, которые, вероятно, не кэшированы, всегда работают хорошо.
Аналогичная проблема может быть смоделирована с использованием psql и, возможно, любого другого языкового драйвера (не только PHP).
Все проблемы возникли, когда мы установили PostgreSQL Query Cache .
Должен ли кеш запросов быть настроен как-то иначе, не вести себя таким образом?
Наши конфигурационные файлы находятся здесь:
http://pastebin.com/g2dBjba0 - pcqd_hba.conf
http://pastebin.com/X9Y3zrjx - pcqd.conf