Index: includes/database/pgsql/install.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database/pgsql/install.inc,v
retrieving revision 1.12
diff -u -p -r1.12 install.inc
--- includes/database/pgsql/install.inc	13 Nov 2010 23:07:16 -0000	1.12
+++ includes/database/pgsql/install.inc	15 Nov 2010 12:58:17 -0000
@@ -22,6 +22,10 @@ class DatabaseTasks_pgsql extends Databa
       'arguments' => array(),
     );
     $this->tasks[] = array(
+      'function' => 'checkBinaryOutput',
+      'arguments' => array(),
+    );
+    $this->tasks[] = array(
       'function' => 'initializeDatabase',
       'arguments' => array(),
     );
@@ -76,6 +80,28 @@ class DatabaseTasks_pgsql extends Databa
   }
 
   /**
+   * Check Binary Output.
+   *
+   * Unserializing does not work on Postgresql 9 when bytea_output is 'hex'.
+   */
+  function checkBinaryOutput() {
+    // PostgreSQL < 9 doesn't support bytea_output, so verify we are running
+    // at least PostgreSQL 9.
+    if (version_compare(DatabaseConnection::getConnection()->version(), '9') >= 0) {
+      $bytea_output = db_query('SHOW bytea_output')->fetchField();
+      if ($bytea_output != 'escape') {
+        $replacements = array(
+          '%setting' => 'bytea_output',
+          '%currentvalue' => $bytea_output,
+          '%neededvalue' => 'escape',
+          '!query' => "<code>ALTER DATABASE your_database SET bytea_output = 'escape';</code>",
+        );
+        $this->fail(st("The %setting setting is currently set to '%currentvalue', but needs to be '%neededvalue'. Change this by running the following query: !query", $replacements));
+      }
+    }
+  }
+
+  /**
    * Make PostgreSQL Drupal friendly.
    */
   function initializeDatabase() {
