@@ -476,20 +476,11 @@ def swap_pk_sequence_name(self, *, first_table: str, second_table: str) -> None:
476476 self .rename_sequence (seq_from = second_seq , seq_to = first_seq )
477477 self .rename_sequence (seq_from = temp_seq , seq_to = second_seq )
478478
479- def transfer_pk_sequence_value (
480- self , * , source_table : str , dest_table : str , convert_pk_to_bigint : bool
481- ) -> None :
479+ def transfer_pk_sequence_value (self , * , source_table : str , dest_table : str ) -> None :
482480 source_seq = self .introspector .get_pk_sequence_name (table = source_table )
483481 dest_seq = self .introspector .get_pk_sequence_name (table = dest_table )
484482 value = self .introspector .get_pk_sequence_value (seq = source_seq )
485483
486- if convert_pk_to_bigint and value < 0 :
487- # special case handling where negative PK values were used before bigint conversion
488- value = 2 ** 31 # reset to positive, specifically the first bigint value
489-
490- # TODO: try to correctly restore a negative PK sequence value if we revert swap
491- # while doing a bigint conversion
492-
493484 self .cur .execute (
494485 psycopg .sql .SQL ("SELECT setval('{schema}.{sequence}', {value});" )
495486 .format (
@@ -500,6 +491,27 @@ def transfer_pk_sequence_value(
500491 .as_string (self .conn )
501492 )
502493
494+ def update_pk_sequence_value (self , * , table : str ) -> None :
495+ """
496+ Update the sequence value if it was negative (for use in bigint conversions).
497+ """
498+ seq = self .introspector .get_pk_sequence_name (table = table )
499+ value = self .introspector .get_pk_sequence_value (seq = seq )
500+
501+ if value < 0 :
502+ # special case handling where negative PK values were used before bigint conversion
503+ value = 2 ** 31 # reset to positive, specifically the first bigint value
504+
505+ self .cur .execute (
506+ psycopg .sql .SQL ("SELECT setval('{schema}.{sequence}', {value});" )
507+ .format (
508+ schema = psycopg .sql .Identifier (self .schema ),
509+ sequence = psycopg .sql .Identifier (seq ),
510+ value = psycopg .sql .SQL (str (value )),
511+ )
512+ .as_string (self .conn )
513+ )
514+
503515 def acquire_access_exclusive_lock (self , * , table : str ) -> None :
504516 self .cur .execute (
505517 psycopg .sql .SQL ("LOCK TABLE {schema}.{table} IN ACCESS EXCLUSIVE MODE;" )
0 commit comments