UpdateDatabase.php
authorAlan Knowles <alan@roojs.com>
Fri, 15 Nov 2013 07:36:52 +0000 (15:36 +0800)
committerAlan Knowles <alan@roojs.com>
Fri, 15 Nov 2013 07:36:52 +0000 (15:36 +0800)
UpdateDatabase.php

index 290c857..577da7f 100644 (file)
@@ -689,6 +689,36 @@ class Pman_Core_UpdateDatabase extends Pman
     }
     function fixSequencesPgsql()
     {
+        DB_DataObject::debugLevel(1);
+        $cs = DB_DataObject::factory('core_enum');
+        $cs->query("
+         SELECT 'ALTER SEQUENCE '|| quote_ident(min(schema_name)) ||'.'|| quote_ident(min(seq_name))
+       ||' OWNED BY '|| quote_ident(min(table_name)) ||'.'|| quote_ident(min(column_name)) ||';'
+FROM (
+         
+          SELECT 
+        n.nspname AS schema_name,
+        c.relname AS table_name,
+        a.attname AS column_name, 
+        regexp_replace(regexp_replace(d.adsrc, E'nextval\\(+[''\"]*', ''),E'[''\"]*::.*\$','') AS seq_name 
+    FROM pg_class c 
+    JOIN pg_attribute a ON (c.oid=a.attrelid) 
+    JOIN pg_attrdef d ON (a.attrelid=d.adrelid AND a.attnum=d.adnum) 
+    JOIN pg_namespace n ON (c.relnamespace=n.oid)
+    WHERE has_schema_privilege(n.oid,'USAGE')
+      AND n.nspname NOT LIKE 'pg!_%' escape '!'
+      AND has_table_privilege(c.oid,'SELECT')
+      AND (NOT a.attisdropped)
+      AND d.adsrc ~ '^nextval'
+) seq
+GROUP BY seq_name HAVING count(*)=1
+");
+        
+        while ($cs->fetch()) {
+            $cmds[] = $cs->cmd;
+        }
+        print_r($cmds);exit;
         DB_DataObject::debugLevel(1);
         $cs = DB_DataObject::factory('core_enum');
          $cs->query("
@@ -715,10 +745,7 @@ class Pman_Core_UpdateDatabase extends Pman
             $cs = DB_DataObject::factory('core_enum');
             $cs->query($cmd);
         }
-        
-         
-        
-        
+       
     }
     
 }
\ No newline at end of file