From 5b46d657f320095d0898542390fc51db575fa04e Mon Sep 17 00:00:00 2001 From: xiamuceer Date: Mon, 10 Nov 2025 21:43:57 +0800 Subject: [PATCH] =?UTF-8?q?fix:1.=E4=BF=AE=E5=A4=8D=E8=BF=81=E7=A7=BB?= =?UTF-8?q?=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/scripts/migrate_sqlite_to_postgres.py | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/backend/scripts/migrate_sqlite_to_postgres.py b/backend/scripts/migrate_sqlite_to_postgres.py index 454bce8..ddc5edc 100644 --- a/backend/scripts/migrate_sqlite_to_postgres.py +++ b/backend/scripts/migrate_sqlite_to_postgres.py @@ -101,6 +101,9 @@ class SQLiteToPostgresMigrator: for sqlite_file in self.sqlite_files: await self._migrate_single_db(sqlite_file) + # 重置自增序列 + await self._reset_sequences() + logger.info("✅ 所有数据迁移完成") async def _create_tables(self): @@ -743,6 +746,46 @@ class SQLiteToPostgresMigrator: return True + async def _reset_sequences(self): + """重置PostgreSQL的自增序列到正确的值""" + logger.info("\n" + "="*60) + logger.info("重置自增序列...") + logger.info("="*60) + + # 需要重置序列的表(使用Integer自增主键的表) + tables_with_sequences = [ + ('relationship_types', 'id'), + ('writing_styles', 'id'), + ('project_default_styles', 'id'), + ] + + async with self.pg_session_maker() as session: + for table_name, id_column in tables_with_sequences: + try: + # 获取表中当前最大ID + result = await session.execute( + text(f"SELECT MAX({id_column}) FROM {table_name}") + ) + max_id = result.scalar() + + if max_id is not None: + # 重置序列到 max_id + 1 + sequence_name = f"{table_name}_{id_column}_seq" + await session.execute( + text(f"SELECT setval('{sequence_name}', :max_id, true)"), + {"max_id": max_id} + ) + logger.info(f" ✅ {table_name}: 序列重置到 {max_id}") + else: + logger.info(f" - {table_name}: 表为空,跳过序列重置") + + except Exception as e: + logger.warning(f" ⚠️ {table_name}: 序列重置失败 - {str(e)}") + + await session.commit() + + logger.info("✅ 序列重置完成") + async def cleanup(self): """清理资源""" await self.pg_engine.dispose()