我使用pg_dump
创建数据库的副本copy1.sql
。
我运行向上迁移以创建新示例
up: asyn (queryInterface) => {
return await queryInterface.bulkInsert('keys', [{ clientKey: 'key123' }]);
}
我运行向下迁移以删除示例
down: async (queryInterface) => {
return await queryInterface.bulkDelete('keys', { clientKey: ['key123'] });
}
我对数据库做了另一个pg_dump
,copy2.sql
。我将数据库的第一个副本与第二个副本进行比较,通过运行bash脚本diff "copy1.sql" "copy2.sql"
来显示向下迁移工作正常
区别在于
-SELECT pg_catalog.setval('public.keys_id_seq', 6, true);
+SELECT pg_catalog.setval('public.keys_id_seq', 7, true);
这会使我的测试失败,因为由于这种差异,两个数据库的副本并不相同。即使我删除了那个键,它也说下一个id序列将从8开始,而不是根据这个document的7。当前存在的表行为1到6。是否有一种方法可以删除示例,使序列从7开始而不是8?这意味着数据库的两个副本都应该
SELECT pg_catalog.setval('public.keys_id_seq', 6, true);
有没有我可以包括的选项?也许是
down: async (queryInterface) => {
return await queryInterface.bulkDelete('keys', { clientKey: ['key123'] }, { resetIdSequence: true });
}
2条答案
按热度按时间iswrvxsc1#
可以使用
truncate table
命令重置序列。Truncate table
命令擦除所有表数据。例如:使用
setval
的第二种方式手动复位。示例:如果不删除所有表数据,则建议将序列值设置为记录的最大id。示例:
rqdpfwrv2#
我知道这对你来说可能为时已晚,但我遇到了同样的问题,并通过在迁移文件中添加
{restartIdentity: true}
来解决它,如下所示(我的一个表示例):为了确保它的工作,我尝试了几个“转弯”与这些命令在终端上:
npx sequelize db:migrate
、npx sequelize db:seed:all
:一切都在原地:)npx sequelize db:migrate:undo:all
:没有table,很好!npx sequelize db:migrate
、npx sequelize db:seed:all
:一切都很好,外键还是好的,太棒了!对于你的代码,你可以尝试这样做:
希望这有帮助;)