--- webform.install.orig	2006-07-14 16:39:00.000000000 +0200
+++ webform.install	2006-07-14 16:59:00.000000000 +0200
@@ -4,52 +4,105 @@
 function webform_install() {
   drupal_set_message('Installing webform');
 
-  db_query("CREATE TABLE if not exists {webform} (
-      nid int(10) unsigned NOT NULL default '0',
-      confirmation text,
-      redirect_post int(1) unsigned not null default '0',
-      submit_limit int(2)  not null default '-1',
-      submit_interval int(10) not null default '157784630',
-      email varchar(255) default NULL,
-      email_from varchar(255) default NULL,
-      email_subject varchar(255) default NULL,
-      PRIMARY KEY  (nid)
-    ) TYPE=MyISAM /*!40100 DEFAULT CHARACTER SET utf8 */"
-  );
-  
-  db_query("CREATE TABLE if not exists {webform_component} (
-      nid int(10) unsigned NOT NULL default '0',
-      cid int(10) unsigned NOT NULL default '0',
-      name varchar(128) default NULL,
-      type varchar(16) default NULL,
-      value varchar(128) default NULL,
-      extra text,
-      mandatory int(2) unsigned default NULL,
-      weight int(2) default NULL,
-      PRIMARY KEY  (nid,cid)
-    ) TYPE=MyISAM /*!40100 DEFAULT CHARACTER SET utf8 */"
-  );
-
-  db_query("CREATE TABLE if not exists {webform_submissions} (
-      nid int(10) unsigned NOT NULL default '0',
-      sid int(10) unsigned NOT NULL default '0',
-      submitted int(11) NOT NULL default '0',
-      user varchar(128),
-      remote_addr varchar(128),
-      PRIMARY KEY  (nid,sid)
-    ) TYPE=MyISAM /*!40100 DEFAULT CHARACTER SET utf8 */"
-  );
-  
-  db_query("CREATE TABLE if not exists {webform_submitted_data} (
-      nid int(10) unsigned NOT NULL default '0',
-      sid int(10) unsigned NOT NULL default '0',
-      cid int(10) unsigned NOT NULL default '0',
-      no int(10) unsigned NOT NULL default '0',
-      data longtext,
-      PRIMARY KEY  (nid,sid,cid,no)
-    ) TYPE=MyISAM /*!40100 DEFAULT CHARACTER SET utf8 */"
-  );
-  
+  switch ($GLOBALS['db_type']) {
+    case 'mysqli':
+    case 'mysql':
+      db_query("CREATE TABLE if not exists {webform} (
+          nid int(10) unsigned NOT NULL default '0',
+          confirmation text,
+          redirect_post int(1) unsigned not null default '0',
+          submit_limit int(2)  not null default '-1',
+          submit_interval int(10) not null default '157784630',
+          email varchar(255) default NULL,
+          email_from varchar(255) default NULL,
+          email_subject varchar(255) default NULL,
+          PRIMARY KEY  (nid)
+        ) TYPE=MyISAM /*!40100 DEFAULT CHARACTER SET utf8 */"
+      );
+      
+      db_query("CREATE TABLE if not exists {webform_component} (
+          nid int(10) unsigned NOT NULL default '0',
+          cid int(10) unsigned NOT NULL default '0',
+          name varchar(128) default NULL,
+          type varchar(16) default NULL,
+          value varchar(128) default NULL,
+          extra text,
+          mandatory int(2) unsigned default NULL,
+          weight int(2) default NULL,
+          PRIMARY KEY  (nid,cid)
+        ) TYPE=MyISAM /*!40100 DEFAULT CHARACTER SET utf8 */"
+      );
+   
+      db_query("CREATE TABLE if not exists {webform_submissions} (
+          nid int(10) unsigned NOT NULL default '0',
+          sid int(10) unsigned NOT NULL default '0',
+          submitted int(11) NOT NULL default '0',
+          user varchar(128),
+          remote_addr varchar(128),
+          PRIMARY KEY  (nid,sid)
+        ) TYPE=MyISAM /*!40100 DEFAULT CHARACTER SET utf8 */"
+      );
+      
+      db_query("CREATE TABLE if not exists {webform_submitted_data} (
+          nid int(10) unsigned NOT NULL default '0',
+          sid int(10) unsigned NOT NULL default '0',
+          cid int(10) unsigned NOT NULL default '0',
+          no int(10) unsigned NOT NULL default '0',
+          data longtext,
+          PRIMARY KEY  (nid,sid,cid,no)
+        ) TYPE=MyISAM /*!40100 DEFAULT CHARACTER SET utf8 */"
+      );
+      break;
+
+    case 'pgsql':
+      db_query("CREATE TABLE {webform} (
+          nid integer NOT NULL default '0',
+          confirmation text NOT NULL default '',
+          redirect_post smallint NOT NULL default '0',
+          submit_limit smallint NOT NULL default '-1',
+          submit_interval integer NOT NULL default '157784630',
+          email varchar(255) NOT NULL default '',
+          email_from varchar(255) NOT NULL default '',
+          email_subject varchar(255) NOT NULL default '',
+          PRIMARY KEY (nid)
+        )"
+      );
+      
+      db_query("CREATE TABLE {webform_component} (
+          nid integer NOT NULL default '0',
+          cid integer NOT NULL default '0',
+          name varchar(128) NOT NULL default '',
+          type varchar(16) NOT NULL default '',
+          value varchar(128) NOT NULL default '',
+          extra text NOT NULL default '',
+          mandatory smallint NOT NULL default '0',
+          weight smallint NOT NULL default '0',
+          PRIMARY KEY (nid,cid)
+        )"
+      );
+   
+      db_query("CREATE TABLE {webform_submissions} (
+          nid integer NOT NULL default '0',
+          sid serial,
+          submitted integer NOT NULL default '0',
+          \"user\" varchar(128),
+          remote_addr varchar(128) NOT NULL default '',
+          PRIMARY KEY (nid,sid)
+        )"
+      );
+      
+      db_query("CREATE TABLE {webform_submitted_data} (
+          nid integer NOT NULL default '0',
+          sid integer NOT NULL default '0',
+          cid integer NOT NULL default '0',
+          no integer NOT NULL default '0',
+          data text NOT NULL default '',
+          PRIMARY KEY (nid,sid,cid,no)
+        )"
+      );
+      break;
+  }
+    
   variable_set('webform_version',array('text'=>'4.7.1', 'build' => '471'));
 
   $success = TRUE;
@@ -164,6 +217,23 @@ function webform_update_4() {
   return $ret;
 }
 
+/*
+ * Update MySQL sequence name to be cross-database compatible
+ */
+function webform_update_5() {
+  $ret = array();
+  
+  switch ($GLOBALS['db_type']) {
+    case 'mysqli':
+    case 'mysql':
+      db_query('LOCK TABLES {sequences} WRITE');
+      $ret[] = update_sql("UPDATE {sequences} SET name = '%s' WHERE name = '%s'", db_prefix_tables('{webform_submissions}_sid'), db_prefix_tables('{webform_submissions}_id'));
+      db_query('UNLOCK TABLES'); 
+      break;
+  }
+  
+  return $ret;
+}
 
 
 /**
--- webform.module.orig	2006-07-14 17:00:00.000000000 +0200
+++ webform.module	2006-07-14 17:56:00.000000000 +0200
@@ -1092,9 +1092,11 @@ function _webform_filtervalues($string) 
 function _webform_save_submission($node, $reply, $componentKeys) {
   global $user;
 
-  $sid = db_next_id('{webform_submissions}_id');
+  $sid = db_next_id('{webform_submissions}_sid');
   
-  db_query("INSERT INTO {webform_submissions} (nid, sid, submitted, user, remote_addr) "." VALUES (%d, %d, %d, '%s', '%s')", $node->nid, $sid, time(), $user->name, $_SERVER['REMOTE_ADDR']);
+  // 'user' is a reserved keyword in Postgres
+  $user_col = $GLOBALS['db_type'] == 'pgsql' ? '"user"' : 'user';
+  db_query("INSERT INTO {webform_submissions} (nid, sid, submitted, $user_col, remote_addr) "." VALUES (%d, %d, %d, '%s', '%s')", $node->nid, $sid, time(), $user->name, $_SERVER['REMOTE_ADDR']);
 
   foreach ($componentKeys as $cid => $cname) {
   	$value = $reply[$cname];
--- components/select.inc.orig	2006-07-14 18:17:00.000000000 +0200
+++ components/select.inc	2006-07-14 18:16:00.000000000 +0200
@@ -130,7 +130,7 @@ function _webform_analysis_rows_select (
       ' FROM {webform_submitted_data} '.
       ' WHERE nid = %d '.
       ' AND cid = %d '.
-      ' AND data != "0" '.
+      ' AND data != \'0\' '.
       ' GROUP BY data ';
     $result = db_query($query, $component['nid'], $component['cid']);
     $rows = array();
