function DatabaseTasks_pgsql::checkBinaryOutput

Check Binary Output.

Unserializing does not work on Postgresql 9 when bytea_output is 'hex'.

File

includes/database/pgsql/install.inc, line 87

Class

DatabaseTasks_pgsql

Code

function checkBinaryOutput() {
    // PostgreSQL < 9 doesn't support bytea_output, so verify we are running
    // at least PostgreSQL 9.
    $database_connection = Database::getConnection();
    if (version_compare($database_connection->version(), '9') >= 0) {
        if (!$this->checkBinaryOutputSuccess()) {
            // First try to alter the database. If it fails, raise an error telling
            // the user to do it themselves.
            $connection_options = $database_connection->getConnectionOptions();
            // It is safe to include the database name directly here, because this
            // code is only called when a connection to the database is already
            // established, thus the database name is guaranteed to be a correct
            // value.
            $query = "ALTER DATABASE \"" . $connection_options['database'] . "\" SET bytea_output = 'escape';";
            try {
                db_query($query);
            } catch (Exception $e) {
                // Ignore possible errors when the user doesn't have the necessary
                // privileges to ALTER the database.
            }
            // Close the database connection so that the configuration parameter
            // is applied to the current connection.
            db_close();
            // Recheck, if it fails, finally just rely on the end user to do the
            // right thing.
            if (!$this->checkBinaryOutputSuccess()) {
                $replacements = array(
                    '%setting' => 'bytea_output',
                    '%current_value' => 'hex',
                    '%needed_value' => 'escape',
                    '!query' => "<code>" . $query . "</code>",
                );
                $this->fail(st("The %setting setting is currently set to '%current_value', but needs to be '%needed_value'. Change this by running the following query: !query", $replacements));
            }
        }
    }
}

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