From 244b6fcef605c48cbf83eb2fa4a7b01e1e3bcbdf Mon Sep 17 00:00:00 2001 From: t-tomek Date: Wed, 2 Nov 2022 14:11:52 +0100 Subject: [PATCH 1/6] Update DB.php Use SET instead of UPDATE queries to support read only databases --- lib-php/DB.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib-php/DB.php b/lib-php/DB.php index 6b6326b0..fc9e12a9 100644 --- a/lib-php/DB.php +++ b/lib-php/DB.php @@ -47,8 +47,8 @@ class DB $conn->exec("SET DateStyle TO 'sql,european'"); $conn->exec("SET client_encoding TO 'utf-8'"); // Disable JIT and parallel workers. They interfere badly with search SQL. - $conn->exec("UPDATE pg_settings SET setting = -1 WHERE name = 'jit_above_cost'"); - $conn->exec("UPDATE pg_settings SET setting = 0 WHERE name = 'max_parallel_workers_per_gather'"); + $conn->exec("SET jit_above_cost TO -1"); + $conn->exec("SET max_parallel_workers_per_gather TO 0"); $iMaxExecution = ini_get('max_execution_time'); if ($iMaxExecution > 0) { $conn->setAttribute(\PDO::ATTR_TIMEOUT, $iMaxExecution); // seconds From 87a109d0e9e63e6ca4530706f2d822459e0cf4dc Mon Sep 17 00:00:00 2001 From: t-tomek Date: Wed, 21 Dec 2022 16:30:55 +0100 Subject: [PATCH 2/6] Update DB.php --- lib-php/DB.php | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/lib-php/DB.php b/lib-php/DB.php index fc9e12a9..63733cc7 100644 --- a/lib-php/DB.php +++ b/lib-php/DB.php @@ -38,23 +38,28 @@ class DB // https://secure.php.net/manual/en/ref.pdo-pgsql.connection.php try { - $conn = new \PDO($this->sDSN, null, null, $aConnOptions); + $this->connection = new \PDO($this->sDSN, null, null, $aConnOptions); } catch (\PDOException $e) { $sMsg = 'Failed to establish database connection:' . $e->getMessage(); throw new \Nominatim\DatabaseError($sMsg, 500, null, $e->getMessage()); } - - $conn->exec("SET DateStyle TO 'sql,european'"); - $conn->exec("SET client_encoding TO 'utf-8'"); + + $this->connection->exec("SET DateStyle TO 'sql,european'"); + $this->connection->exec("SET client_encoding TO 'utf-8'"); // Disable JIT and parallel workers. They interfere badly with search SQL. - $conn->exec("SET jit_above_cost TO -1"); - $conn->exec("SET max_parallel_workers_per_gather TO 0"); + if ($this->getPostgresVersion() < 11) { + $this->connection->exec("UPDATE pg_settings SET setting = -1 WHERE name = 'jit_above_cost'"); + $this->connection->exec("UPDATE pg_settings SET setting = 0 WHERE name = 'max_parallel_workers_per_gather'"); + } else { + $this->connection->exec("SET jit_above_cost TO -1"); + $this->connection->exec("SET max_parallel_workers_per_gather TO 0"); + } + $iMaxExecution = ini_get('max_execution_time'); if ($iMaxExecution > 0) { $conn->setAttribute(\PDO::ATTR_TIMEOUT, $iMaxExecution); // seconds } - - $this->connection = $conn; + return true; } From 15f9e397dd81dca6aae5cc6d70e670e79a951ce8 Mon Sep 17 00:00:00 2001 From: t-tomek Date: Wed, 21 Dec 2022 16:31:39 +0100 Subject: [PATCH 3/6] Update DB.php --- lib-php/DB.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib-php/DB.php b/lib-php/DB.php index 63733cc7..f5fea7f8 100644 --- a/lib-php/DB.php +++ b/lib-php/DB.php @@ -43,7 +43,7 @@ class DB $sMsg = 'Failed to establish database connection:' . $e->getMessage(); throw new \Nominatim\DatabaseError($sMsg, 500, null, $e->getMessage()); } - + $this->connection->exec("SET DateStyle TO 'sql,european'"); $this->connection->exec("SET client_encoding TO 'utf-8'"); // Disable JIT and parallel workers. They interfere badly with search SQL. @@ -59,7 +59,7 @@ class DB if ($iMaxExecution > 0) { $conn->setAttribute(\PDO::ATTR_TIMEOUT, $iMaxExecution); // seconds } - + return true; } From 2e6ff1b7508e738c1ecb4647aa5890422b771121 Mon Sep 17 00:00:00 2001 From: t-tomek Date: Wed, 21 Dec 2022 16:32:33 +0100 Subject: [PATCH 4/6] Update DB.php --- lib-php/DB.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib-php/DB.php b/lib-php/DB.php index f5fea7f8..8b51955d 100644 --- a/lib-php/DB.php +++ b/lib-php/DB.php @@ -57,7 +57,7 @@ class DB $iMaxExecution = ini_get('max_execution_time'); if ($iMaxExecution > 0) { - $conn->setAttribute(\PDO::ATTR_TIMEOUT, $iMaxExecution); // seconds + $this->connection->setAttribute(\PDO::ATTR_TIMEOUT, $iMaxExecution); // seconds } return true; From e8d3c0a99ae747bc26d161762eb538466a7c01a3 Mon Sep 17 00:00:00 2001 From: t-tomek Date: Wed, 21 Dec 2022 19:56:24 +0100 Subject: [PATCH 5/6] Update DB.php --- lib-php/DB.php | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/lib-php/DB.php b/lib-php/DB.php index 8b51955d..d49e5149 100644 --- a/lib-php/DB.php +++ b/lib-php/DB.php @@ -47,12 +47,9 @@ class DB $this->connection->exec("SET DateStyle TO 'sql,european'"); $this->connection->exec("SET client_encoding TO 'utf-8'"); // Disable JIT and parallel workers. They interfere badly with search SQL. - if ($this->getPostgresVersion() < 11) { - $this->connection->exec("UPDATE pg_settings SET setting = -1 WHERE name = 'jit_above_cost'"); - $this->connection->exec("UPDATE pg_settings SET setting = 0 WHERE name = 'max_parallel_workers_per_gather'"); - } else { + $this->connection->exec("SET max_parallel_workers_per_gather TO 0"); + if ($this->getPostgresVersion() >= 11) { $this->connection->exec("SET jit_above_cost TO -1"); - $this->connection->exec("SET max_parallel_workers_per_gather TO 0"); } $iMaxExecution = ini_get('max_execution_time'); From 151b3c40211dd090dfd5998f2c700319d6de0cf6 Mon Sep 17 00:00:00 2001 From: t-tomek Date: Tue, 27 Dec 2022 08:34:20 +0100 Subject: [PATCH 6/6] Update DB.php --- lib-php/DB.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib-php/DB.php b/lib-php/DB.php index d49e5149..553d9452 100644 --- a/lib-php/DB.php +++ b/lib-php/DB.php @@ -47,9 +47,9 @@ class DB $this->connection->exec("SET DateStyle TO 'sql,european'"); $this->connection->exec("SET client_encoding TO 'utf-8'"); // Disable JIT and parallel workers. They interfere badly with search SQL. - $this->connection->exec("SET max_parallel_workers_per_gather TO 0"); + $this->connection->exec('SET max_parallel_workers_per_gather TO 0'); if ($this->getPostgresVersion() >= 11) { - $this->connection->exec("SET jit_above_cost TO -1"); + $this->connection->exec('SET jit_above_cost TO -1'); } $iMaxExecution = ini_get('max_execution_time');