Skip to content
Snippets Groups Projects
Commit 0a8a9dcb authored by catch's avatar catch
Browse files

Issue #2010368 by fjgarlin, Pancho, poker10, daffie: Installer can't create...

Issue #2010368 by fjgarlin, Pancho, poker10, daffie: Installer can't create new database on PostgreSQL
parent 5404ebfb
No related branches found
No related tags found
No related merge requests found
...@@ -286,22 +286,34 @@ public function databaseType() { ...@@ -286,22 +286,34 @@ public function databaseType() {
public function createDatabase($database) { public function createDatabase($database) {
// Escape the database name. // Escape the database name.
$database = Database::getConnection()->escapeDatabase($database); $database = Database::getConnection()->escapeDatabase($database);
$db_created = FALSE;
// If the PECL intl extension is installed, use it to determine the proper
// locale. Otherwise, fall back to en_US. // Try to determine the proper locales for character classification and
if (class_exists('Locale')) { // collation. If we could determine locales other than 'en_US', try creating
$locale = \Locale::getDefault(); // the database with these first.
} $ctype = setlocale(LC_CTYPE, 0);
else { $collate = setlocale(LC_COLLATE, 0);
$locale = 'en_US'; if ($ctype && $collate) {
try {
$this->connection->exec("CREATE DATABASE $database WITH TEMPLATE template0 ENCODING='UTF8' LC_CTYPE='$ctype.UTF-8' LC_COLLATE='$collate.UTF-8'");
$db_created = TRUE;
}
catch (\Exception $e) {
// It might be that the server is remote and does not support the
// locale and collation of the webserver, so we will try again.
}
} }
try { // Otherwise fall back to creating the database using the 'en_US' locales.
// Create the database and set it as active. if (!$db_created) {
$this->connection->exec("CREATE DATABASE $database WITH TEMPLATE template0 ENCODING='utf8' LC_CTYPE='$locale.utf8' LC_COLLATE='$locale.utf8'"); try {
} $this->connection->exec("CREATE DATABASE $database WITH TEMPLATE template0 ENCODING='UTF8' LC_CTYPE='en_US.UTF-8' LC_COLLATE='en_US.UTF-8'");
catch (\Exception $e) { }
throw new DatabaseNotFoundException($e->getMessage()); catch (\Exception $e) {
// If the database can't be created with the 'en_US' locale either,
// we're finally throwing an exception.
throw new DatabaseNotFoundException($e->getMessage());
}
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment