diff -u3 xwiki-core.orig/src/main/java/com/xpn/xwiki/store/DatabaseProduct.java xwiki-core/src/main/java/com/xpn/xwiki/store/DatabaseProduct.java
--- xwiki-core.orig/src/main/java/com/xpn/xwiki/store/DatabaseProduct.java	2007-12-20 22:05:40.000000000 +0000
+++ xwiki-core/src/main/java/com/xpn/xwiki/store/DatabaseProduct.java	2007-12-20 22:07:44.000000000 +0000
@@ -49,6 +49,11 @@
     public static final DatabaseProduct HSQLDB = new DatabaseProduct("HSQL Database Engine");
 
     /**
+     * The product name for PostgreSQL databases.
+     */
+    public static final DatabaseProduct POSTGRESQL = new DatabaseProduct("PostgreSQL");
+
+    /**
      * Represents an unknown database for which we were not able to find the product name.
      */
     public static final DatabaseProduct UNKNOWN = new DatabaseProduct("Unknown");
@@ -118,6 +123,10 @@
         {
             product = HSQLDB;
         }
+        else if (productNameAsString.equalsIgnoreCase(POSTGRESQL.getProductName()))
+        {
+            product = POSTGRESQL;
+        }
         else
         {
             product = UNKNOWN;
diff -u3 xwiki-core.orig/src/main/java/com/xpn/xwiki/store/XWikiHibernateBaseStore.java xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiHibernateBaseStore.java
--- xwiki-core.orig/src/main/java/com/xpn/xwiki/store/XWikiHibernateBaseStore.java	2007-12-20 22:05:39.000000000 +0000
+++ xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiHibernateBaseStore.java	2007-12-20 22:07:43.000000000 +0000
@@ -329,6 +329,9 @@
         } else if (databaseProduct == DatabaseProduct.HSQLDB) {
             return wikiName.equalsIgnoreCase(context.getMainXWiki()) ? "PUBLIC" : wikiName
                 .replace('-', '_');
+        } else if (databaseProduct == DatabaseProduct.POSTGRESQL) {
+            return wikiName.equalsIgnoreCase(context.getMainXWiki()) ? "PUBLIC" : wikiName
+                .replace('-', '_');
         } else
             return wikiName.replace('-', '_');
     }
@@ -378,7 +381,8 @@
             DatabaseProduct databaseProduct = getDatabaseProductName(context);
             if (databaseProduct == DatabaseProduct.ORACLE
                 || databaseProduct == DatabaseProduct.HSQLDB
-                || databaseProduct == DatabaseProduct.DERBY) {
+                || databaseProduct == DatabaseProduct.DERBY
+                || databaseProduct == DatabaseProduct.POSTGRESQL) {
                 dschema = config.getProperty(Environment.DEFAULT_SCHEMA);
                 config.setProperty(Environment.DEFAULT_SCHEMA, contextSchema);
                 Iterator iter = config.getTableMappings();
@@ -581,6 +585,18 @@
                             } catch (Exception e) {
                             }
                         }
+                    } else if (DatabaseProduct.POSTGRESQL == databaseProduct) {
+                        Statement stmt = null;
+                        try {
+                            stmt = session.connection().createStatement();
+                            stmt.execute("SET search_path TO " + schemaName);
+                        } finally {
+                            try {
+                                if (stmt != null)
+                                    stmt.close();
+                            } catch (Exception e) {
+                            }
+                        }
                     } else {
                         String catalog = session.connection().getCatalog();
                         catalog = (catalog == null) ? null : catalog.replace('_', '-');
diff -u3 xwiki-core.orig/src/main/java/com/xpn/xwiki/store/XWikiHibernateStore.java xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiHibernateStore.java
--- xwiki-core.orig/src/main/java/com/xpn/xwiki/store/XWikiHibernateStore.java	2007-12-20 22:05:39.000000000 +0000
+++ xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiHibernateStore.java	2007-12-20 22:07:43.000000000 +0000
@@ -135,6 +135,8 @@
                 stmt.execute("CREATE SCHEMA " + schema);
             } else if (DatabaseProduct.HSQLDB == databaseProduct) {
                 stmt.execute("CREATE SCHEMA " + schema + " AUTHORIZATION DBA");
+            } else if (DatabaseProduct.POSTGRESQL == databaseProduct) {
+                stmt.execute("CREATE SCHEMA " + schema);
             } else {
                 stmt.execute("create database " + schema);
             }
