2011-12-21 97 views
2
<?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"; 
     } 
} 

的上面的代碼段中生成的第一次這樣的:PostgreSQL的查詢高速緩衝 - 關閉連接意外

[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. 

這意味着一些緩存查詢會導致問題。我們試圖改變quires的順序,但它沒有幫助。只有像SELECT 1+8這些可能未被緩存的簡單查詢總是運行良好。

類似的問題可以使用psql和可能的任何其他語言驅動程序(不僅僅是PHP)來模擬。

當我們安裝了PostgreSQL Query Cache時,所有的麻煩都出現了。

查詢緩存應該配置不知何故不以這種方式?

我們的配置文件所在的位置: http://pastebin.com/g2dBjba0 - pcqd_hba.conf http://pastebin.com/X9Y3zrjx - pcqd.conf

+0

'PostgreSQL'或'Postgres'縮寫。沒有「Postgre」。 [更多這裏](http://wiki.postgresql.org/wiki/Postgres)。 – 2011-12-21 22:10:51

+0

您是否嘗試過使用PDO pgsql驅動程序? – Kenaniah 2011-12-22 01:12:58

+0

正如我所說,即使使用原始的psql(PostgreSQL的shell工具),它的行爲也是一樣的。我使用哪個驅動程序並不重要。 – 2011-12-22 07:59:44

回答

0

機會是你已經在PostgreSQL的查詢緩存,這是造成段錯誤在後臺的錯誤。您的最佳解決方案是卸載此附加組件。