在NestJS 10与TypeORM 0.3.17中如何创建删除表的迁移?
解决NestJS + TypeORM创建删除表迁移的问题
第一步:修复package.json中的脚本错误
你的migration:create命令复用了带-d参数的typeorm脚本,但migration:create是创建空迁移文件的命令,不需要指定数据源,导致参数冲突报错。修改package.json中的脚本,单独定义migration:create:
"typeorm": "npm run build && npx typeorm -d dist/config/data-source.js", "migration:run": "npm run typeorm -- migration:run", "migration:generate": "npm run typeorm -- migration:generate ./src/migrations/$npm_config_name", "migration:create": "npx typeorm migration:create ./src/migrations/$npm_config_name", "migration:revert": "npm run typeorm -- migration:revert"
第二步:创建空迁移文件
执行以下命令生成删除表的空迁移文件:
npm run migration:create --name=dropCategoriesTable
执行成功后,src/migrations目录下会生成一个带时间戳的TypeScript文件,比如1699999999999_drop_categories_table.ts。
第三步:编写删除表的迁移逻辑
打开生成的迁移文件,修改up(执行迁移)和down(回滚迁移)方法,实现删除表的逻辑:
import { MigrationInterface, QueryRunner } from "typeorm"; export class DropCategoriesTable1699999999999 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise<void> { // 执行删除categories表的SQL(表名需和你的实体对应,蛇形命名策略下类名Category对应表名categories) await queryRunner.query(`DROP TABLE "categories"`); } public async down(queryRunner: QueryRunner): Promise<void> { // 回滚操作:重新创建categories表,需和原表结构一致 await queryRunner.query(` CREATE TABLE "categories" ( "id" SERIAL PRIMARY KEY, "name" VARCHAR(255) NOT NULL, "created_at" TIMESTAMP NOT NULL DEFAULT now(), "updated_at" TIMESTAMP NOT NULL DEFAULT now() ) `); } }
注意:
down方法用于回滚迁移,必须保证能恢复原表结构,需根据你实际的表字段调整SQL语句。
第四步:运行迁移
先编译项目:
npm run build
再执行迁移命令删除表:
npm run migration:run
若需要回滚操作,执行:
npm run migration:revert
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

