diff -urN ../datasync.orig/datasync.install ./datasync.install
--- ../datasync.orig/datasync.install	2009-07-16 21:16:52.000000000 +0200
+++ ./datasync.install	2009-08-08 17:11:15.000000000 +0200
@@ -11,6 +11,9 @@
   else if ($db_type == 'mysqli') {
     drupal_set_message(t("WARNING: You are using the mysqli database type. This likely won't work and will create lots of weird errors. You must use the mysql database type."), 'error');
   }
+  else if ($db_type == 'pgsql') {
+    drupal_set_message(t("WARNING: PostgreSQL support is experimental, please report any bug."));
+  }
   else {
     drupal_set_message(t("WARNING: You are using an unsupported database type. This likely won't work. You must use the mysql database type."), 'error');
   }
diff -urN ../datasync.orig/datasync.job.inc ./datasync.job.inc
--- ../datasync.orig/datasync.job.inc	2009-08-08 19:12:21.000000000 +0200
+++ ./datasync.job.inc	2009-08-08 18:56:54.000000000 +0200
@@ -429,7 +429,7 @@
     }
     
     //UNSTARTED == 0
-    $query = "SELECT job_id FROM {datasync_jobs} WHERE started=0 AND phase!='datasync_done' AND phase!='datasync_failed'";
+    $query = "SELECT job_id FROM {datasync_jobs} WHERE started = 0 AND phase <> 'datasync_done' AND phase <> 'datasync_failed'";
     if (count($filters)) {
       $query .= 'AND ( (' . implode(') OR (', $filters) . ' ) ) ';
     }
diff -urN ../datasync.orig/datasync_run.php ./datasync_run.php
--- ../datasync.orig/datasync_run.php	2009-07-24 20:41:00.000000000 +0200
+++ ./datasync_run.php	2009-08-08 19:06:55.000000000 +0200
@@ -25,14 +25,13 @@
 require_once './includes/bootstrap.inc';
 drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
 
-
 //no session
 session_save_session(FALSE);
 //make sure there is not time limit
-set_time_limit(0);
+//set_time_limit(0);
 //up memory_limit
-$mem_lim = ds_variable_get('datasync_run_memory_limit', datasync_return_bytes(ini_get('memory_limit')));
-ini_set('memory_limit', $mem_lim);
+//$mem_lim = ds_variable_get('datasync_run_memory_limit', datasync_return_bytes(ini_get('memory_limit')));
+//ini_set('memory_limit', $mem_lim);
 
 //fake login
 global $user;
@@ -43,6 +42,21 @@
 //we need a function to make sure we don't have database/forking issues
 $db_name = db_set_active();
 function datasync_remove_database_conn($db_name) {
+  // We have to do an explicit connection close, else postgres will fail.
+  // BTW, we do it for any other db layer, this is cleaner, because PHP could
+  // keep some references in forks (I think this was my bug source).
+  global $db_type;
+  switch ($db_type) {
+    case 'mysql':
+      mysql_close($GLOBALS['db_conns'][$db_name]);
+      break;
+    case 'mysqli':
+      mysqli_close($GLOBALS['db_conns'][$db_name]);
+      break;      
+    case 'pgsql':
+      pg_close($GLOBALS['db_conns'][$db_name]);
+      break;
+  }
   unset($GLOBALS['db_conns'][$db_name]);
   unset($GLOBALS['active_db']);
 }
diff -urN ../datasync.orig/datasync_scheduler/datasync_scheduler.module ./datasync_scheduler/datasync_scheduler.module
--- ../datasync.orig/datasync_scheduler/datasync_scheduler.module	2009-07-24 20:41:00.000000000 +0200
+++ ./datasync_scheduler/datasync_scheduler.module	2009-08-08 17:09:25.000000000 +0200
@@ -128,7 +128,7 @@
   $result = db_query(
   	"SELECT job_id FROM {datasync_jobs} dj 
   	INNER JOIN {datasync_scheduler_timeouts} dst ON dj.type=dst.job_type 
-  	WHERE started != 0 AND ((%d - started) > timeout_interval)", time());
+  	WHERE started <> 0 AND ((%d - started) > timeout_interval)", time());
   while ($row = db_fetch_object($result)) {
     $handler = datasync_load_job_type($row->job_id);
     $jobs[] = new $handler($row->job_id);
