diff --git a/includes/install.pgsql.inc b/includes/install.pgsql.inc
new file mode 100644
index 0000000000000000000000000000000000000000..cc9da399853e6571f404acbe97db6318b3cac248
--- /dev/null
+++ b/includes/install.pgsql.inc
@@ -0,0 +1,134 @@
+<?php
+// $Id$
+
+// PostgreSQL specific install functions
+
+/**
+ * Check if PostgreSQL is available.
+ *
+ * @return
+ *  TRUE/FALSE
+ */
+function pgsql_is_available() {
+  return function_exists('pg_connect');
+}
+
+/**
+ * Check if we can connect to PostgreSQL.
+ *
+ * @return
+ *  TRUE/FALSE
+ */
+function drupal_test_pgsql($url, &$success) {
+  if (!pgsql_is_available()) {
+    drupal_set_message('PHP PostgreSQL support not enabled.', 'error');
+    return FALSE;
+  }
+
+  $url = parse_url($url);
+
+  // Decode url-encoded information in the db connection string.
+  $url['user'] = urldecode($url['user']);
+  $url['pass'] = urldecode($url['pass']);
+  $url['host'] = urldecode($url['host']);
+  $url['path'] = urldecode($url['path']);
+
+  // Build pgsql connection string and allow for non-standard PostgreSQL port.
+  $conn_string = ' user='. $url['user'] .' dbname='. substr($url['path'], 1) .' password='. $url['pass'] . ' host=' . $url['host'];
+  $conn_string .= isset($url['port']) ? ' port=' . $url['port'] : '';
+
+  // Test connecting to the database.
+  $connection = @pg_connect($conn_string);
+  if (!$connection) {
+    drupal_set_message(st('Failure to connect to your PostgreSQL database server. PostgreSQL reports the following message: %error.<ul><li>Are you sure you have the correct username and password?</li><li>Are you sure that you have typed the correct database hostname?</li><li>Are you sure that the database server is running?</li><li>Are you sure you typed the correct database name?</li></ul>For more help, see the <a href="http://drupal.org/node/258">Installation and upgrading handbook</a>. If you are unsure what these terms mean you should probably contact your hosting provider.', array('%error' => 'Connection failed. See log file for failure reason')), 'error');
+    return FALSE;
+  }
+
+  $success = array('CONNECT');
+
+  // Test CREATE.
+  $query = 'CREATE TABLE drupal_install_test (id integer NOT NULL)';
+  $result = pg_query($connection, $query);
+  if ($error = pg_result_error($result)) {
+    drupal_set_message(st('We were unable to create a test table on your PostgreSQL database server with the command %query. PostgreSQL reports the following message: %error.<ul><li>Are you sure the configured username has the necessary PostgreSQL permissions to create tables in the database?</li></ul>For more help, see the <a href="http://drupal.org/node/258">Installation and upgrading handbook</a>. If you are unsure what these terms mean you should probably contact your hosting provider.', array('%query' => $query, '%error' => $error)), 'error');
+    return FALSE;
+  }
+  $err = FALSE;
+  $success[] = 'SELECT';
+  $success[] = 'CREATE';
+
+  // Test INSERT.
+  $query = 'INSERT INTO drupal_install_test (id) VALUES (1)';
+  $result = pg_query($connection, $query);
+  if ($error = pg_result_error($result)) {
+    drupal_set_message(st('We were unable to insert a value into a test table on your PostgreSQL database server. We tried inserting a value with the command %query and PostgreSQL reported the following error: %error.', array('%query' => $query, '%error' => $error)), 'error');
+    $err = TRUE;
+  }
+  else {
+    $success[] = 'INSERT';
+  }
+
+  // Test UPDATE.
+  $query = 'UPDATE drupal_install_test SET id = 2';
+  $result = pg_query($connection, $query);
+  if ($error = pg_result_error($result)) {
+    drupal_set_message(st('We were unable to update a value in a test table on your PostgreSQL database server. We tried updating a value with the command %query and PostgreSQL reported the following error: %error.', array('%query' => $query, '%error' => $error)), 'error');
+    $err = TRUE;
+  }
+  else {
+    $success[] = 'UPDATE';
+  }
+
+  // Test LOCK.
+  $query = 'BEGIN; LOCK drupal_install_test IN SHARE ROW EXCLUSIVE MODE';
+  $result = pg_query($connection, $query);
+  if ($error = pg_result_error($result)) {
+    drupal_set_message(st('We were unable to lock a test table on your PostgreSQL database server. We tried locking a table with the command %query and PostgreSQL reported the following error: %error.', array('%query' => $query, '%error' => $error)), 'error');
+    $err = TRUE;
+  }
+  else {
+    $success[] = 'LOCK';
+  }
+
+  // Test UNLOCK, which is done automatically upon transaction end in PostgreSQL
+  $query = 'COMMIT';
+  $result = pg_query($connection, $query);
+  if ($error = pg_result_error()) {
+    drupal_set_message(st('We were unable to unlock a test table on your PostgreSQL database server. We tried unlocking a table with the command %query and PostgreSQL reported the following error: %error.', array('%query' => $query, '%error' => $error)), 'error');
+    $err = TRUE;
+  }
+  else {
+    $success[] = 'UNLOCK';
+  }
+
+  // Test DELETE.
+  $query = 'DELETE FROM drupal_install_test';
+  $result = pg_query($connection, $query);
+  if ($error = pg_result_error()) {
+    drupal_set_message(st('We were unable to delete a value from a test table on your PostgreSQL database server. We tried deleting a value with the command %query and PostgreSQL reported the following error: %error.', array('%query' => $query, '%error' => $error)), 'error');
+    $err = TRUE;
+  }
+  else {
+    $success[] = 'DELETE';
+  }
+
+  // Test DROP.
+  $query = 'DROP TABLE drupal_install_test';
+  $result = pg_query($connection, $query);
+  if ($error = pg_result_error()) {
+    drupal_set_message(st('We were unable to drop a test table from your PostgreSQL database server. We tried dropping a table with the command %query and PostgreSQL reported the following error %error.', array('%query' => $query, '%error' => $error)), 'error');
+    $err = TRUE;
+  }
+  else {
+    $success[] = 'DROP';
+  }
+
+  if ($err) {
+    return FALSE;
+  }
+
+  pg_close($connection);
+  return TRUE;
+}
+
+?>
diff --git a/modules/aggregator/aggregator.install b/modules/aggregator/aggregator.install
index 9c9b52f1abc01714903c88e035fb3aba3eab744e..5d042cc023ecc999eaadce03ed033809a45902b6 100644
--- a/modules/aggregator/aggregator.install
+++ b/modules/aggregator/aggregator.install
@@ -55,6 +55,58 @@ function aggregator_install() {
         PRIMARY KEY (iid)
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
 
+      break;
+    case 'pgsql':
+      db_query("CREATE TABLE {aggregator_category} (
+        cid serial,
+        title varchar(255) NOT NULL default '',
+        description text NOT NULL,
+        block smallint NOT NULL default '0',
+        PRIMARY KEY (cid),
+        UNIQUE (title)
+      )");
+
+      db_query("CREATE TABLE {aggregator_category_feed} (
+        fid int NOT NULL default '0',
+        cid int NOT NULL default '0',
+        PRIMARY KEY (fid,cid)
+      )");
+
+      db_query("CREATE TABLE {aggregator_category_item} (
+        iid int NOT NULL default '0',
+        cid int NOT NULL default '0',
+        PRIMARY KEY (iid,cid)
+      )");
+
+      db_query("CREATE TABLE {aggregator_feed} (
+        fid serial,
+        title varchar(255) NOT NULL default '',
+        url varchar(255) NOT NULL default '',
+        refresh int NOT NULL default '0',
+        checked int NOT NULL default '0',
+        link varchar(255) NOT NULL default '',
+        description text NOT NULL,
+        image text NOT NULL,
+        etag varchar(255) NOT NULL default '',
+        modified int NOT NULL default '0',
+        block smallint NOT NULL default '0',
+        PRIMARY KEY (fid),
+        UNIQUE (url),
+        UNIQUE (title)
+      )");
+
+      db_query("CREATE TABLE {aggregator_item} (
+        iid serial,
+        fid int NOT NULL default '0',
+        title varchar(255) NOT NULL default '',
+        link varchar(255) NOT NULL default '',
+        author varchar(255) NOT NULL default '',
+        description text NOT NULL,
+        timestamp int default NULL,
+        guid varchar(255),
+        PRIMARY KEY (iid)
+      )");
+
       break;
   }
 }
diff --git a/modules/book/book.install b/modules/book/book.install
index cfc2975550944e3f31f4ae23b7580b808175f806..377d219adcdb569bab34d895208cc7abaad2b792 100644
--- a/modules/book/book.install
+++ b/modules/book/book.install
@@ -14,5 +14,17 @@ function book_install() {
         KEY nid (nid),
         KEY parent (parent)
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
+      break;
+    case 'pgsql':
+      db_query("CREATE TABLE {book} (
+        vid uint NOT NULL default '0',
+        nid uint NOT NULL default '0',
+        parent int NOT NULL default '0',
+        weight smallint NOT NULL default '0',
+        PRIMARY KEY (vid)
+      )");
+      db_query("CREATE INDEX {book}_nid_idx ON {book} (nid)");
+      db_query("CREATE INDEX {book}_parent_idx ON {book} (parent)");
+      break;
   }
-}
\ No newline at end of file
+}
diff --git a/modules/contact/contact.install b/modules/contact/contact.install
index 14e3c737d319d4769c1c14dd96cc0e38c4f85749..60816763186f27c606344d8936a3fea998899a5b 100644
--- a/modules/contact/contact.install
+++ b/modules/contact/contact.install
@@ -15,5 +15,18 @@ function contact_install() {
         PRIMARY KEY (cid),
         UNIQUE KEY category (category)
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
+      break;
+    case 'pgsql':
+      db_query("CREATE TABLE {contact} (
+        cid serial CHECK (cid >= 0),
+        category varchar(255) NOT NULL default '',
+        recipients text NOT NULL default '',
+        reply text NOT NULL default '',
+        weight smallint NOT NULL default '0',
+        selected smallint NOT NULL default '0',
+        PRIMARY KEY (cid),
+        UNIQUE (category)
+      )");
+      break;
   }
-}
\ No newline at end of file
+}
diff --git a/modules/drupal/drupal.install b/modules/drupal/drupal.install
index b1b418571909fdef2c8e8ba92197b17cd247a76c..50012e145f6c12bf4147f957797a8f4a4b820a8a 100644
--- a/modules/drupal/drupal.install
+++ b/modules/drupal/drupal.install
@@ -26,5 +26,29 @@ function drupal_install() {
         type varchar(255) NOT NULL default '',
         PRIMARY KEY (cid,name)
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
+      break;
+    case 'pgsql':
+      db_query("CREATE TABLE {client} (
+        cid serial CHECK (cid >= 0),
+        link varchar(255) NOT NULL default '',
+        name varchar(128) NOT NULL default '',
+        mail varchar(128) NOT NULL default '',
+        slogan text NOT NULL,
+        mission text NOT NULL,
+        users int NOT NULL default '0',
+        nodes int NOT NULL default '0',
+        version varchar(35) NOT NULL default'',
+        created int NOT NULL default '0',
+        changed int NOT NULL default '0',
+        PRIMARY KEY (cid)
+      )");
+
+      db_query("CREATE TABLE {client_system} (
+        cid int NOT NULL default '0',
+        name varchar(255) NOT NULL default '',
+        type varchar(255) NOT NULL default '',
+        PRIMARY KEY (cid,name)
+      )");
+      break;
   }
-}
\ No newline at end of file
+}
diff --git a/modules/forum/forum.install b/modules/forum/forum.install
index 9d7d80c21e919df4522322e303b0ff6c83eb645b..c11eee1082ce1642ad6007e7db2eb832401f8023 100644
--- a/modules/forum/forum.install
+++ b/modules/forum/forum.install
@@ -13,5 +13,16 @@ function forum_install() {
         KEY nid (nid),
         KEY tid (tid)
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
+      break;
+    case 'pgsql':
+      db_query("CREATE TABLE {forum} (
+        nid uint NOT NULL default '0',
+        vid uint NOT NULL default '0',
+        tid uint NOT NULL default '0',
+        PRIMARY KEY (vid)
+      )");
+      db_query("CREATE INDEX {forum}_nid_idx ON {forum} (nid)");
+      db_query("CREATE INDEX {forum}_tid_idx ON {forum} (tid)");
+      break;
   }
-}
\ No newline at end of file
+}
diff --git a/modules/locale/locale.install b/modules/locale/locale.install
index 08bcbc5bcfb75cec557b13cd6a3c85466b653b38..99192be0db74329c0e8982cd299a76b28ca73657 100644
--- a/modules/locale/locale.install
+++ b/modules/locale/locale.install
@@ -33,6 +33,37 @@ function locale_install() {
         KEY plid (plid),
         KEY plural (plural)
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
+      break;
+    case 'pgsql':
+      db_query("CREATE TABLE {locales_meta} (
+        locale varchar(12) NOT NULL default '',
+        name varchar(64) NOT NULL default '',
+        enabled int NOT NULL default '0',
+        isdefault int NOT NULL default '0',
+        plurals int NOT NULL default '0',
+        formula varchar(128) NOT NULL default '',
+        PRIMARY KEY (locale)
+      )");
+
+      db_query("CREATE TABLE {locales_source} (
+        lid serial,
+        location varchar(255) NOT NULL default '',
+        source bytea NOT NULL,
+        PRIMARY KEY (lid)
+      )");
+
+      db_query("CREATE TABLE {locales_target} (
+        lid int NOT NULL default '0',
+        translation bytea NOT NULL,
+        locale varchar(12) NOT NULL default '',
+        plid int NOT NULL default '0',
+        plural int NOT NULL default '0'
+      )");
+      db_query("CREATE INDEX {locales_target}_lid_idx ON {locales_target} (lid)");
+      db_query("CREATE INDEX {locales_target}_locale_idx ON {locales_target} (locale)");
+      db_query("CREATE INDEX {locales_target}_plid_idx ON {locales_target} (plid)");
+      db_query("CREATE INDEX {locales_target}_plural_idx ON {locales_target} (plural)");
+      break;
   }
   db_query("INSERT INTO {locales_meta} (locale, name, enabled, isdefault) VALUES ('en', 'English', '1', '1')");
 }
diff --git a/modules/poll/poll.install b/modules/poll/poll.install
index 8c8feaef8994c07babcb42e4e90c544255231105..f05958cca2fe4c76f7f49287f673e94cc425a998 100644
--- a/modules/poll/poll.install
+++ b/modules/poll/poll.install
@@ -31,5 +31,33 @@ function poll_install() {
         PRIMARY KEY (chid),
         KEY nid (nid)
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
+    case 'pgsql':
+      db_query("CREATE TABLE {poll} (
+        nid uint NOT NULL default '0',
+        runtime int NOT NULL default '0',
+        active uint NOT NULL default '0',
+        PRIMARY KEY (nid)
+      )");
+
+      db_query("CREATE TABLE {poll_votes} (
+        nid uint NOT NULL,
+        uid uint NOT NULL default 0,
+        chorder int NOT NULL default -1,
+        hostname varchar(128) NOT NULL default ''
+      )");
+      db_query("CREATE INDEX {poll_votes}_nid_idx ON {poll_votes} (nid)");
+      db_query("CREATE INDEX {poll_votes}_uid_idx ON {poll_votes} (uid)");
+      db_query("CREATE INDEX {poll_votes}_hostname_idx ON {poll_votes} (hostname)");
+
+      db_query("CREATE TABLE {poll_choices} (
+        chid serial CHECK (chid >= 0),
+        nid uint NOT NULL default '0',
+        chtext varchar(128) NOT NULL default '',
+        chvotes int NOT NULL default '0',
+        chorder int NOT NULL default '0',
+        PRIMARY KEY (chid)
+      )");
+      db_query("CREATE INDEX {poll_choices}_nid_idx ON {poll_choices} (nid)");
+      break;
   }
 }
diff --git a/modules/profile/profile.install b/modules/profile/profile.install
index 2aa4e46cbdcb4bf2516510af0731df2d31dd1d90..555c0f109eefe53e350f5b2e22ad613bc7ef0859 100644
--- a/modules/profile/profile.install
+++ b/modules/profile/profile.install
@@ -31,5 +31,33 @@ function profile_install() {
         KEY uid (uid),
         KEY fid (fid)
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
+    case 'pgsql':
+      db_query("CREATE TABLE {profile_fields} (
+        fid serial,
+        title varchar(255) default NULL,
+        name varchar(128) default NULL,
+        explanation TEXT default NULL,
+        category varchar(255) default NULL,
+        page varchar(255) default NULL,
+        type varchar(128) default NULL,
+        weight smallint DEFAULT '0' NOT NULL,
+        required smallint DEFAULT '0' NOT NULL,
+        register smallint DEFAULT '0' NOT NULL,
+        visibility smallint DEFAULT '0' NOT NULL,
+        autocomplete smallint DEFAULT '0' NOT NULL,
+        options text,
+        UNIQUE (name),
+        PRIMARY KEY (fid)
+      )");
+      db_query("CREATE INDEX {profile_fields}_category_idx ON {profile_fields} (category)");
+
+      db_query("CREATE TABLE {profile_values} (
+        fid uint default '0',
+        uid uint default '0',
+        value text
+      )");
+      db_query("CREATE INDEX {profile_values}_uid_idx ON {profile_values} (uid)");
+      db_query("CREATE INDEX {profile_values}_fid_idx ON {profile_values} (fid)");
+      break;
   }
-}
\ No newline at end of file
+}
diff --git a/modules/search/search.install b/modules/search/search.install
index d6ab2fb2b1b1adc8905c13841b94958e5cf0110d..eddde85d49b1860363c875471fdcee91e2f6424b 100644
--- a/modules/search/search.install
+++ b/modules/search/search.install
@@ -29,5 +29,32 @@ function search_install() {
         count float default NULL,
         PRIMARY KEY (word)
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
+      break;
+    case 'pgsql':
+      db_query("CREATE TABLE {search_dataset} (
+        sid uint NOT NULL default '0',
+        type varchar(16) default NULL,
+        data text NOT NULL
+      )");
+      db_query("CREATE INDEX {search_dataset}_sid_type_idx ON {search_dataset} (sid, type)");
+
+      db_query("CREATE TABLE {search_index} (
+        word varchar(50) NOT NULL default '',
+        sid uint NOT NULL default '0',
+        type varchar(16) default NULL,
+        fromsid uint NOT NULL default '0',
+        fromtype varchar(16) default NULL,
+        score float default NULL
+      )");
+      db_query("CREATE INDEX {search_index}_sid_type_idx ON {search_index} (sid, type)");
+      db_query("CREATE INDEX {search_index}_from_sid_type_idx ON {search_index} (fromsid, fromtype)");
+      db_query("CREATE INDEX {search_index}_word_idx ON {search_index} (word)");
+
+      db_query("CREATE TABLE {search_total} (
+        word varchar(50) NOT NULL default '',
+        count float default NULL,
+        PRIMARY KEY (word)
+      )");
+      break;
   }
-}
\ No newline at end of file
+}
diff --git a/modules/statistics/statistics.install b/modules/statistics/statistics.install
index 2d48993003e29b16d45b7a71dc883a2c6565ebe0..2517d88199f725ad1b4c82009783d35f08393e67 100644
--- a/modules/statistics/statistics.install
+++ b/modules/statistics/statistics.install
@@ -18,5 +18,21 @@ function statistics_install() {
         KEY accesslog_timestamp (timestamp),
         PRIMARY KEY (aid)
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
+      break;
+    case 'pgsql':
+      db_query("CREATE TABLE {accesslog} (
+        aid serial,
+        sid varchar(32) NOT NULL default '',
+        title varchar(255) default NULL,
+        path varchar(255) default NULL,
+        url varchar(255) default NULL,
+        hostname varchar(128) default NULL,
+        uid uint default '0',
+        timer uint NOT NULL default '0',
+        timestamp uint NOT NULL default '0',
+        PRIMARY KEY (aid)
+      )");
+      db_query("CREATE INDEX {accesslog}_accesslog_timestamp_idx ON {accesslog} (timestamp)");
+      break;
   }
-}
\ No newline at end of file
+}
diff --git a/modules/system/system.install b/modules/system/system.install
index ba23868f14f13895e142fa057ebcd0a6053349a2..7ff587f53a8549a75fabb66bba2bdfb11aa81b5d 100644
--- a/modules/system/system.install
+++ b/modules/system/system.install
@@ -384,9 +384,393 @@ function system_install() {
 
       break;
     case 'pgsql':
-      break;
+      /* create unsigned types */
+      db_query("CREATE DOMAIN uint integer CHECK (VALUE >= 0)");
+      db_query("CREATE DOMAIN smalluint smallint CHECK (VALUE >= 0)");
+      db_query("CREATE DOMAIN biguint bigint CHECK (VALUE >= 0)");
+
+      db_query("CREATE TABLE {access} (
+        aid serial,
+        mask varchar(255) NOT NULL default '',
+        type varchar(255) NOT NULL default '',
+        status smallint NOT NULL default '0',
+        PRIMARY KEY (aid)
+      )");
+
+      db_query("CREATE TABLE {authmap} (
+        aid serial CHECK (aid >= 0),
+        uid int NOT NULL default '0',
+        authname varchar(128) NOT NULL default '',
+        module varchar(128) NOT NULL default '',
+        PRIMARY KEY (aid),
+        UNIQUE (authname)
+      )");
 
+      db_query("CREATE TABLE {blocks} (
+        module varchar(64) DEFAULT '' NOT NULL,
+        delta varchar(32) NOT NULL default '0',
+        theme varchar(255) NOT NULL default '',
+        status smallint DEFAULT '0' NOT NULL,
+        weight smallint DEFAULT '0' NOT NULL,
+        region varchar(64) DEFAULT 'left' NOT NULL,
+        custom smallint DEFAULT '0' NOT NULL,
+        throttle smallint DEFAULT '0' NOT NULL,
+        visibility smallint DEFAULT '0' NOT NULL,
+        pages text DEFAULT '' NOT NULL
+      )");
+
+      db_query("CREATE TABLE {boxes} (
+        bid serial,
+        title varchar(64) NOT NULL default '',
+        body text,
+        info varchar(128) NOT NULL default '',
+        format smallint NOT NULL default '0',
+        PRIMARY KEY (bid),
+        UNIQUE (info)
+      )");
+
+      db_query("CREATE TABLE {cache} (
+        cid varchar(255) NOT NULL default '',
+        data bytea,
+        expire int NOT NULL default '0',
+        created int NOT NULL default '0',
+        headers text,
+        PRIMARY KEY (cid)
+      )");
+      db_query("CREATE INDEX {cache}_expire_idx ON {cache} (expire)");
+
+      db_query("CREATE TABLE {comments} (
+        cid serial,
+        pid int NOT NULL default '0',
+        nid int NOT NULL default '0',
+        uid int NOT NULL default '0',
+        subject varchar(64) NOT NULL default '',
+        comment text NOT NULL,
+        hostname varchar(128) NOT NULL default '',
+        timestamp int NOT NULL default '0',
+        score int NOT NULL default '0',
+        status smalluint NOT NULL default '0',
+        format smallint NOT NULL default '0',
+        thread varchar(255) NOT NULL,
+        users text,
+        name varchar(60) default NULL,
+        mail varchar(64) default NULL,
+        homepage varchar(255) default NULL,
+        PRIMARY KEY (cid)
+      )");
+      db_query("CREATE INDEX {comments}_nid_idx ON {comments} (nid)");
+
+      db_query("CREATE TABLE {node_comment_statistics} (
+        nid serial CHECK (nid >= 0),
+        last_comment_timestamp int NOT NULL default '0',
+        last_comment_name varchar(60) default NULL,
+        last_comment_uid int NOT NULL default '0',
+        comment_count uint NOT NULL default '0',
+        PRIMARY KEY (nid)
+      )");
+      db_query("CREATE INDEX {node_comment_statistics}_node_comment_timestamp_idx ON {node_comment_statistics} (last_comment_timestamp)");
+
+      db_query("CREATE TABLE {files} (
+        fid uint NOT NULL default 0,
+        nid uint NOT NULL default 0,
+        filename varchar(255) NOT NULL default '',
+        filepath varchar(255) NOT NULL default '',
+        filemime varchar(255) NOT NULL default '',
+        filesize uint NOT NULL default 0,
+        PRIMARY KEY (fid)
+      )");
+
+      db_query("CREATE TABLE {file_revisions} (
+        fid uint NOT NULL default 0,
+        vid uint NOT NULL default 0,
+        description varchar(255) NOT NULL default '',
+        list smalluint NOT NULL default 0,
+        PRIMARY KEY (fid, vid)
+      )");
+
+      db_query("CREATE TABLE {filter_formats} (
+        format serial,
+        name varchar(255) NOT NULL default '',
+        roles varchar(255) NOT NULL default '',
+        cache smallint NOT NULL default '0',
+        PRIMARY KEY (format),
+        UNIQUE (name)
+      )");
+
+      db_query("CREATE TABLE {filters} (
+        format int NOT NULL default '0',
+        module varchar(64) NOT NULL default '',
+        delta smallint DEFAULT '0' NOT NULL,
+        weight smallint DEFAULT '0' NOT NULL
+      )");
+      db_query("CREATE INDEX {filters}_weight_idx ON {filters} (weight)");
+
+      db_query("CREATE TABLE {flood} (
+        event varchar(64) NOT NULL default '',
+        hostname varchar(128) NOT NULL default '',
+        timestamp int NOT NULL default '0'
+      )");
+
+      db_query("CREATE TABLE {history} (
+        uid int NOT NULL default '0',
+        nid int NOT NULL default '0',
+        timestamp int NOT NULL default '0',
+        PRIMARY KEY (uid,nid)
+      )");
+
+      db_query("CREATE TABLE {menu} (
+        mid serial CHECK (mid >= 0),
+        pid uint NOT NULL default '0',
+        path varchar(255) NOT NULL default '',
+        title varchar(255) NOT NULL default '',
+        description varchar(255) NOT NULL default '',
+        weight smallint NOT NULL default '0',
+        type uint NOT NULL default '0',
+        PRIMARY KEY (mid)
+      )");
+      db_query("ALTER SEQUENCE {menu}_mid_seq MINVALUE 2 RESTART 2");
+
+      db_query("CREATE TABLE {node} (
+        nid serial CHECK (nid >= 0),
+        vid uint NOT NULL default '0',
+        type varchar(32) NOT NULL default '',
+        title varchar(128) NOT NULL default '',
+        uid int NOT NULL default '0',
+        status int NOT NULL default '1',
+        created int NOT NULL default '0',
+        changed int NOT NULL default '0',
+        comment int NOT NULL default '0',
+        promote int NOT NULL default '0',
+        moderate int NOT NULL default '0',
+        sticky int NOT NULL default '0',
+        PRIMARY KEY (nid, vid),
+        UNIQUE (vid)
+      )");
+      db_query("CREATE INDEX {node}_node_type_idx ON {node} (substr (type, 1, 4))");
+      db_query("CREATE INDEX {node}_node_title_type_idx ON {node} (title, substr(type, 1, 4))");
+      db_query("CREATE INDEX {node}_status_idx ON {node} (status)");
+      db_query("CREATE INDEX {node}_uid_idx ON {node} (uid)");
+      db_query("CREATE INDEX {node}_node_moderate_idx ON {node} (moderate)");
+      db_query("CREATE INDEX {node}_node_promote_status_idx ON {node} (promote, status)");
+      db_query("CREATE INDEX {node}_node_created_idx ON {node} (created)");
+      db_query("CREATE INDEX {node}_node_changed_idx ON {node} (changed)");
+      db_query("CREATE INDEX {node}_node_status_type_idx ON {node} (status, type, nid)");
+      db_query("CREATE INDEX {node}_nid_idx ON {node} (nid)");
+
+      db_query("CREATE TABLE {node_access} (
+        nid uint NOT NULL default '0',
+        gid uint NOT NULL default '0',
+        realm varchar(255) NOT NULL default '',
+        grant_view smalluint NOT NULL default '0',
+        grant_update smalluint NOT NULL default '0',
+        grant_delete smalluint NOT NULL default '0',
+        PRIMARY KEY (nid,gid,realm)
+      )");
+
+      db_query("CREATE TABLE {node_revisions} (
+        nid uint NOT NULL,
+        vid uint NOT NULL,
+        uid int NOT NULL default '0',
+        title varchar(128) NOT NULL default '',
+        body text NOT NULL default '',
+        teaser text NOT NULL default '',
+        log text NOT NULL default '',
+        timestamp int NOT NULL default '0',
+        format int NOT NULL default '0',
+        PRIMARY KEY (vid)
+      )");
+      db_query("CREATE INDEX {node_revisions}_nid_idx ON {node_revisions} (nid)");
+      db_query("CREATE INDEX {node_revisions}_uid_idx ON {node_revisions} (uid)");
+      db_query("CREATE SEQUENCE {node_revisions}_vid_seq INCREMENT 1 START 1");
+
+      db_query("CREATE TABLE {url_alias} (
+        pid serial CHECK (pid >= 0),
+        src varchar(128) NOT NULL default '',
+        dst varchar(128) NOT NULL default '',
+        PRIMARY KEY (pid),
+        UNIQUE (dst)
+      )");
+      db_query("CREATE INDEX {url_alias}_src_idx ON {url_alias} (src)");
+
+      db_query("CREATE TABLE {permission} (
+        rid uint NOT NULL default '0',
+        perm text,
+        tid uint NOT NULL default '0'
+      )");
+      db_query("CREATE INDEX {permission}_rid_idx ON {permission} (rid)");
+
+      db_query("CREATE TABLE {role} (
+        rid serial CHECK (rid >= 0),
+        name varchar(32) NOT NULL default '',
+        PRIMARY KEY (rid),
+        UNIQUE (name)
+      )");
+
+      db_query("CREATE TABLE {blocks_roles} (
+        module varchar(64) NOT NULL,
+        delta varchar(32) NOT NULL,
+        rid uint NOT NULL,
+        PRIMARY KEY (module, delta, rid)
+      )");
+
+      db_query("CREATE TABLE {sessions} (
+        uid uint NOT NULL,
+        sid varchar(32) NOT NULL default '',
+        hostname varchar(128) NOT NULL default '',
+        timestamp int NOT NULL default '0',
+        cache int NOT NULL default '0',
+        session text,
+        PRIMARY KEY (sid)
+      )");
+      db_query("CREATE INDEX {sessions}_uid_idx ON {sessions} (uid)");
+      db_query("CREATE INDEX {sessions}_timestamp_idx ON {sessions} (timestamp)");
+
+/* Only used for MySQL
+      db_query("CREATE TABLE {sequences} (
+        name varchar(255) NOT NULL default '',
+        id uint NOT NULL default '0',
+        PRIMARY KEY (name)
+      )"); */
+
+      db_query("CREATE TABLE {node_counter} (
+        nid int NOT NULL default '0',
+        totalcount biguint NOT NULL default '0',
+        daycount uint NOT NULL default '0',
+        timestamp uint NOT NULL default '0',
+        PRIMARY KEY (nid)
+      )");
+      db_query("CREATE INDEX {node_counter}_totalcount_idx ON {node_counter} (totalcount)");
+      db_query("CREATE INDEX {node_counter}_daycount_idx ON {node_counter} (daycount)");
+      db_query("CREATE INDEX {node_counter}_timestamp_idx ON {node_counter} (timestamp)");
+
+      db_query("CREATE TABLE {system} (
+        filename varchar(255) NOT NULL default '',
+        name varchar(255) NOT NULL default '',
+        type varchar(255) NOT NULL default '',
+        description varchar(255) NOT NULL default '',
+        status int NOT NULL default '0',
+        throttle smallint DEFAULT '0' NOT NULL,
+        bootstrap int NOT NULL default '0',
+        schema_version smallint NOT NULL default -1,
+        weight int NOT NULL default '0',
+        PRIMARY KEY (filename)
+      )");
+      db_query("CREATE INDEX {system}_weight_idx ON {system} (weight)");
+
+      db_query("CREATE TABLE {term_data} (
+        tid serial CHECK (tid >= 0),
+        vid uint NOT NULL default '0',
+        name varchar(255) NOT NULL default '',
+        description text,
+        weight smallint NOT NULL default '0',
+        PRIMARY KEY (tid)
+      )");
+      db_query("CREATE INDEX {term_data}_vid_idx ON {term_data} (vid)");
+
+      db_query("CREATE TABLE {term_hierarchy} (
+        tid uint NOT NULL default '0',
+        parent uint NOT NULL default '0',
+        PRIMARY KEY (tid, parent)
+      )");
+      db_query("CREATE INDEX {term_hierarchy}_tid_idx ON {term_hierarchy} (tid)");
+      db_query("CREATE INDEX {term_hierarchy}_parent_idx ON {term_hierarchy} (parent)");
+
+      db_query("CREATE TABLE {term_node} (
+        nid uint NOT NULL default '0',
+        tid uint NOT NULL default '0',
+        PRIMARY KEY (tid,nid)
+      )");
+      db_query("CREATE INDEX {term_node}_nid_idx ON {term_node} (nid)");
+      db_query("CREATE INDEX {term_node}_tid_idx ON {term_node} (tid)");
+
+      db_query("CREATE TABLE {term_relation} (
+        tid1 uint NOT NULL default '0',
+        tid2 uint NOT NULL default '0'
+      )");
+      db_query("CREATE INDEX {term_relation}_tid1_idx ON {term_relation} (tid1)");
+      db_query("CREATE INDEX {term_relation}_tid2_idx ON {term_relation} (tid2)");
+
+      db_query("CREATE TABLE {term_synonym} (
+        tid uint NOT NULL default '0',
+        name varchar(255) NOT NULL default ''
+      )");
+      db_query("CREATE INDEX {term_synonym}_tid_idx ON {term_synonym} (tid)");
+      db_query("CREATE INDEX {term_synonym}_name_idx ON {term_synonym} (substr(name, 1, 3))");
+
+      db_query("CREATE TABLE {users} (
+        uid uint NOT NULL default '0',
+        name varchar(60) NOT NULL default '',
+        pass varchar(32) NOT NULL default '',
+        mail varchar(64) default '',
+        mode smallint NOT NULL default '0',
+        sort smallint default '0',
+        threshold smallint default '0',
+        theme varchar(255) NOT NULL default '',
+        signature varchar(255) NOT NULL default '',
+        created int NOT NULL default '0',
+        access int NOT NULL default '0',
+        login int NOT NULL default '0',
+        status smallint NOT NULL default '0',
+        timezone varchar(8) default NULL,
+        language varchar(12) NOT NULL default '',
+        picture varchar(255) NOT NULL DEFAULT '',
+        init varchar(64) default '',
+        data text,
+        PRIMARY KEY (uid),
+        UNIQUE (name)
+      )");
+      db_query("CREATE INDEX {users}_access_idx ON {users} (access)");
+      db_query("CREATE SEQUENCE {users}_uid_seq INCREMENT 1 START 1");
+
+      db_query("CREATE TABLE {users_roles} (
+        uid uint NOT NULL default '0',
+        rid uint NOT NULL default '0',
+        PRIMARY KEY (uid, rid)
+      )");
+
+      db_query("CREATE TABLE {variable} (
+        name varchar(48) NOT NULL default '',
+        value text NOT NULL,
+        PRIMARY KEY (name)
+      )");
+
+      db_query("CREATE TABLE {vocabulary} (
+        vid serial CHECK (vid >= 0),
+        name varchar(255) NOT NULL default '',
+        description text,
+        help varchar(255) NOT NULL default '',
+        relations smalluint NOT NULL default '0',
+        hierarchy smalluint NOT NULL default '0',
+        multiple smalluint NOT NULL default '0',
+        required smalluint NOT NULL default '0',
+        tags smalluint NOT NULL default '0',
+        module varchar(255) NOT NULL default '',
+        weight smallint NOT NULL default '0',
+        PRIMARY KEY (vid)
+      )");
+
+      db_query("CREATE TABLE {vocabulary_node_types} (
+        vid uint NOT NULL DEFAULT '0',
+        type varchar(32) NOT NULL DEFAULT '',
+        PRIMARY KEY (vid, type)
+      )");
+
+      db_query("CREATE TABLE {watchdog} (
+        wid serial,
+        uid int NOT NULL default '0',
+        type varchar(16) NOT NULL default '',
+        message text NOT NULL,
+        severity smalluint NOT NULL default '0',
+        link varchar(255) NOT NULL default '',
+        location varchar(128) NOT NULL default '',
+        referer varchar(128) NOT NULL default '',
+        hostname varchar(128) NOT NULL default '',
+        timestamp int NOT NULL default '0',
+        PRIMARY KEY (wid)
+      )");
+      break;
   }
+
   db_query("INSERT INTO {system} (filename, name, type, description, status, throttle, bootstrap, schema_version) VALUES ('themes/engines/phptemplate/phptemplate.engine', 'phptemplate', 'theme_engine', '', 1, 0, 0, 0)");
   db_query("INSERT INTO {system} (filename, name, type, description, status, throttle, bootstrap, schema_version) VALUES ('themes/bluemarine/page.tpl.php', 'bluemarine', 'theme', 'themes/engines/phptemplate/phptemplate.engine', 1, 0, 0, 0)");