]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 577793: Improve the Pg SERIAL-altering code now that we require 8.3
authorMax Kanat-Alexander <mkanat@bugzilla.org>
Sat, 10 Jul 2010 04:00:08 +0000 (21:00 -0700)
committerMax Kanat-Alexander <mkanat@bugzilla.org>
Sat, 10 Jul 2010 04:00:08 +0000 (21:00 -0700)
r=mkanat, a=mkanat (module owner)

Bugzilla/DB/Schema/Pg.pm

index 3559bae9c9abb66a3361b7cfbc6487c64ed6374d..31eedadcb74ff6cc8df440e1123b71d10bc6e039 100644 (file)
@@ -100,11 +100,9 @@ sub get_rename_column_ddl {
     my @sql = ("ALTER TABLE $table RENAME COLUMN $old_name TO $new_name");
     my $def = $self->get_column_abstract($table, $old_name);
     if ($def->{TYPE} =~ /SERIAL/i) {
-        # We have to rename the series also, and fix the default of the series.
-        push(@sql, "ALTER TABLE ${table}_${old_name}_seq 
-                      RENAME TO ${table}_${new_name}_seq");
-        push(@sql, "ALTER TABLE $table ALTER COLUMN $new_name 
-                    SET DEFAULT NEXTVAL('${table}_${new_name}_seq')");
+        # We have to rename the series also.
+        push(@sql, "ALTER SEQUENCE ${table}_${old_name}_seq 
+                         RENAME TO ${table}_${new_name}_seq");
     }
     return @sql;
 }
@@ -147,7 +145,8 @@ sub _get_alter_type_sql {
                               TYPE $type");
 
     if ($new_def->{TYPE} =~ /serial/i && $old_def->{TYPE} !~ /serial/i) {
-        push(@statements, "CREATE SEQUENCE ${table}_${column}_seq");
+        push(@statements, "CREATE SEQUENCE ${table}_${column}_seq
+                                  OWNED BY $table.$column");
         push(@statements, "SELECT setval('${table}_${column}_seq',
                                          MAX($table.$column))
                              FROM $table");
@@ -160,10 +159,9 @@ sub _get_alter_type_sql {
     if ($old_def->{TYPE} =~ /serial/i && $new_def->{TYPE} !~ /serial/i) {
         push(@statements, "ALTER TABLE $table ALTER COLUMN $column 
                            DROP DEFAULT");
-        # XXX Pg actually won't let us drop the sequence, even though it's
-        #     no longer in use. So we harmlessly leave behind a sequence
-        #     that does nothing.
-        #push(@statements, "DROP SEQUENCE ${table}_${column}_seq");
+        push(@statements, "ALTER SEQUENCE ${table}_${column}_seq 
+                           OWNED BY NONE");
+        push(@statements, "DROP SEQUENCE ${table}_${column}_seq");
     }
 
     return @statements;