<?php
+/**
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * This file is part of Nominatim. (https://nominatim.org)
+ *
+ * Copyright (C) 2022 by the Nominatim developer community.
+ * For a full list of authors see the git log.
+ */
namespace Nominatim;
// 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.
+ $this->connection->exec('SET max_parallel_workers_per_gather TO 0');
+ if ($this->getPostgresVersion() >= 11) {
+ $this->connection->exec('SET jit_above_cost TO -1');
+ }
+
$iMaxExecution = ini_get('max_execution_time');
if ($iMaxExecution > 0) {
- $conn->setAttribute(\PDO::ATTR_TIMEOUT, $iMaxExecution); // seconds
+ $this->connection->setAttribute(\PDO::ATTR_TIMEOUT, $iMaxExecution); // seconds
}
- $this->connection = $conn;
return true;
}