You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 02:56:10