function Connection::createDatabase

Same name in this branch
  1. 11.x core/modules/sqlite/src/Driver/Database/sqlite/Connection.php \Drupal\sqlite\Driver\Database\sqlite\Connection::createDatabase()
  2. 11.x core/modules/mysql/src/Driver/Database/mysql/Connection.php \Drupal\mysql\Driver\Database\mysql\Connection::createDatabase()
  3. 11.x core/tests/fixtures/database_drivers/custom/fake/Connection.php \Drupal\Driver\Database\fake\Connection::createDatabase()
  4. 11.x core/lib/Drupal/Core/Database/Connection.php \Drupal\Core\Database\Connection::createDatabase()
Same name in other branches
  1. 9 core/modules/sqlite/src/Driver/Database/sqlite/Connection.php \Drupal\sqlite\Driver\Database\sqlite\Connection::createDatabase()
  2. 9 core/modules/mysql/src/Driver/Database/mysql/Connection.php \Drupal\mysql\Driver\Database\mysql\Connection::createDatabase()
  3. 9 core/modules/pgsql/src/Driver/Database/pgsql/Connection.php \Drupal\pgsql\Driver\Database\pgsql\Connection::createDatabase()
  4. 9 core/tests/fixtures/database_drivers/custom/fake/Connection.php \Drupal\Driver\Database\fake\Connection::createDatabase()
  5. 9 core/lib/Drupal/Core/Database/Connection.php \Drupal\Core\Database\Connection::createDatabase()
  6. 8.9.x core/tests/fixtures/database_drivers/custom/fake/Connection.php \Drupal\Driver\Database\fake\Connection::createDatabase()
  7. 8.9.x core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php \Drupal\Core\Database\Driver\sqlite\Connection::createDatabase()
  8. 8.9.x core/lib/Drupal/Core/Database/Driver/mysql/Connection.php \Drupal\Core\Database\Driver\mysql\Connection::createDatabase()
  9. 8.9.x core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php \Drupal\Core\Database\Driver\pgsql\Connection::createDatabase()
  10. 8.9.x core/lib/Drupal/Core/Database/Connection.php \Drupal\Core\Database\Connection::createDatabase()
  11. 10 core/modules/sqlite/src/Driver/Database/sqlite/Connection.php \Drupal\sqlite\Driver\Database\sqlite\Connection::createDatabase()
  12. 10 core/modules/mysql/src/Driver/Database/mysql/Connection.php \Drupal\mysql\Driver\Database\mysql\Connection::createDatabase()
  13. 10 core/modules/pgsql/src/Driver/Database/pgsql/Connection.php \Drupal\pgsql\Driver\Database\pgsql\Connection::createDatabase()
  14. 10 core/tests/fixtures/database_drivers/custom/fake/Connection.php \Drupal\Driver\Database\fake\Connection::createDatabase()
  15. 10 core/lib/Drupal/Core/Database/Connection.php \Drupal\Core\Database\Connection::createDatabase()

Overrides \Drupal\Core\Database\Connection::createDatabase().

Parameters

string $database: The name of the database to create.

Throws

\Drupal\Core\Database\DatabaseNotFoundException

Overrides Connection::createDatabase

File

core/modules/pgsql/src/Driver/Database/pgsql/Connection.php, line 287

Class

Connection
PostgreSQL implementation of \Drupal\Core\Database\Connection.

Namespace

Drupal\pgsql\Driver\Database\pgsql

Code

public function createDatabase($database) {
    // Escape the database name.
    $database = Database::getConnection()->escapeDatabase($database);
    $db_created = FALSE;
    // Try to determine the proper locales for character classification and
    // collation. If we could determine locales other than 'en_US', try creating
    // the database with these first.
    $ctype = setlocale(LC_CTYPE, 0);
    $collate = setlocale(LC_COLLATE, 0);
    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.
        }
    }
    // Otherwise fall back to creating the database using the 'en_US' locales.
    if (!$db_created) {
        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) {
            // If the database can't be created with the 'en_US' locale either,
            // we're finally throwing an exception.
            throw new DatabaseNotFoundException($e->getMessage());
        }
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.