--- modules/system/system.install.~1~	2010-08-06 06:54:12.000000000 -0400
+++ modules/system/system.install	2010-11-14 21:56:48.213916083 -0500
@@ -1212,7 +1212,14 @@
   db_add_primary_key($ret, 'term_node', array('vid', 'tid', 'nid'));
   db_add_index($ret, 'term_node', 'vid', array('vid'));
 
+  switch ($GLOBALS['db_type']) {
+    case 'pgsql':
+      db_query('UPDATE {term_node} SET vid = n.vid FROM {node} n WHERE {term_node}.nid = n.nid');
+      break;
+    default:
   db_query('UPDATE {term_node} SET vid = (SELECT vid FROM {node} n WHERE {term_node}.nid = n.nid)');
+      break;
+  }
   return $ret;
 }
 
@@ -2461,6 +2468,8 @@
   if (db_table_exists('term_node')) {
     db_drop_primary_key($ret, 'term_node');
     db_drop_index($ret, 'term_node', 'tid');
+    # This is also part of 6044, but is required to avoid duplicate (tid,vid) tuples
+    $ret[] = update_sql("DELETE FROM {term_node} WHERE vid = 0");
     db_add_primary_key($ret, 'term_node', array('tid', 'vid'));
   }
   if (db_table_exists('term_relation')) {
