Index: includes/database/pgsql/install.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database/pgsql/install.inc,v
retrieving revision 1.14
diff -u -p -r1.14 install.inc
--- includes/database/pgsql/install.inc	21 Dec 2010 21:20:04 -0000	1.14
+++ includes/database/pgsql/install.inc	24 Feb 2011 22:30:36 -0000
@@ -187,6 +187,10 @@ class DatabaseTasks_pgsql extends Databa
         \'SELECT $1 || $2;\'
         LANGUAGE \'sql\'
       ');
+      db_query('CREATE OR REPLACE FUNCTION "concat"(anynonarray, anynonarray, anynonarray) RETURNS text AS
+	\'SELECT CAST($1 AS text) || CAST($2 AS text) || CAST($3 AS text);\'
+	LANGUAGE \'sql\'
+      ');
 
       $this->pass(st('PostgreSQL has initialized itself.'));
     }
Index: modules/system/system.install
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.install,v
retrieving revision 1.533
diff -u -p -r1.533 system.install
--- modules/system/system.install	19 Feb 2011 00:50:43 -0000	1.533
+++ modules/system/system.install	24 Feb 2011 22:30:36 -0000
@@ -2973,6 +2973,19 @@ function system_update_7069() {
 }
 
 /**
+ * Add a three-parameter concat function (used by skinr) for postgres
+ */
+function system_update_7070() {
+  // Only pgsql is affected.
+  if (db_driver() == 'pgsql') {
+    db_query('CREATE OR REPLACE FUNCTION "concat"(anynonarray, anynonarray, anynonarray) RETURNS text AS
+      \'SELECT CAST($1 AS text) || CAST($2 AS text) || CAST($3 AS text);\'
+      LANGUAGE \'sql\'
+    ');
+  }
+}
+
+/**
  * @} End of "defgroup updates-6.x-to-7.x"
  * The next series of updates should start at 8000.
  */
