From 96c541ecef98e2b93db8eba144be2d8c48e6c2cf Mon Sep 17 00:00:00 2001 From: Mariusz Felisiak Date: Sat, 1 Oct 2022 07:53:32 +0200 Subject: [4.1.x] Refs #34058 -- Fixed changing/deleting sequences when altering pre-Django 4.1 auto fields on PostgreSQL. Thanks Anders Kaseorg for the report. Follow up to 19e6efa50b603af325e7f62058364f278596758f. Regression in 2eea361eff58dd98c409c5227064b901f41bd0d6. Backport of bc3b8f152452ba0e41f28baa93c0bf8f39cddb09 from main --- tests/schema/tests.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/schema/tests.py b/tests/schema/tests.py index e6cdf563f4..126c03c63c 100644 --- a/tests/schema/tests.py +++ b/tests/schema/tests.py @@ -1808,14 +1808,30 @@ class SchemaTests(TransactionTestCase): new_field.set_attributes_from_name("id") with connection.schema_editor() as editor: editor.alter_field(SerialAutoField, old_field, new_field, strict=True) + sequence_name = f"{table}_{column}_seq" with connection.cursor() as cursor: cursor.execute( "SELECT data_type FROM pg_sequences WHERE sequencename = %s", - [f"{table}_{column}_seq"], + [sequence_name], ) row = cursor.fetchone() sequence_data_type = row[0] if row and row[0] else None self.assertEqual(sequence_data_type, "bigint") + # Rename the column. + old_field = new_field + new_field = AutoField(primary_key=True) + new_field.model = SerialAutoField + new_field.set_attributes_from_name("renamed_id") + with connection.schema_editor() as editor: + editor.alter_field(SerialAutoField, old_field, new_field, strict=True) + with connection.cursor() as cursor: + cursor.execute( + "SELECT data_type FROM pg_sequences WHERE sequencename = %s", + [sequence_name], + ) + row = cursor.fetchone() + sequence_data_type = row[0] if row and row[0] else None + self.assertEqual(sequence_data_type, "integer") finally: with connection.cursor() as cursor: cursor.execute(f'DROP TABLE "{table}"') -- cgit v1.3