TypeORM-运行特定的迁移

时间:2019-03-29 16:56:31

标签: typeorm

我知道typeorm migration:run将运行所有迁移文件,但是有时我想运行insert文件或修改后的文件。但是我找不到任何文档。怎么做,谢谢。

3 个答案:

答案 0 :(得分:1)

如果你想用数据为数据库做种子,你不应该使用迁移。 迁移的目的是创建数据库的结构,这就是为什么迁移是串行执行的,因此非串行地运行单个迁移就错了。

对于使用 typeorm 的数据库种子,您可以使用 typeorm cli query,您可以创建一个从文件中读取 SQL 的脚本。

例如在 node.js 应用程序和 bash 中:

package.json:

"scripts": {
...,
"typeorm": "npx ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli --config ormconfig-migrations.ts",
"db:seed": "bash scripts/db-seed.sh"
}

db-seed.sh:

#!/bin/bash
query=""

for filename in sql/seed/*.seed.sql; do
 query=${query}"$(< ${filename})";
done

npm run typeorm query "${query}";

注意在这个解决方案中有一个 bug,总是有一个错误从 logger typeorm 使用中抛出 - 忽略它。与db操作无关,不代表过程成功。

不应修改与他人共享的迁移文件,在这种情况下,应创建新迁移。 如果该文件未共享且正在开发中,您可以根据需要多次运行 migration:revert,然后修改并再次运行 migration:run

答案 1 :(得分:0)

这是不可能的。您可以使用

查看迁移文档
typeorm migration:run -h

在开发过程中,您可以在本地更改连接设置,例如更改 ormconfig.json 中迁移文件的路径以仅匹配您的文件。

"migrations": [
    "src/db/migration/**/yourmigration.ts"
]

答案 2 :(得分:0)

为了运行特定的迁移,我的解决方案是在 ormconfig.js 中添加:

module.exports = {
...
   migrations: [process.env.DB_MIGRATION_DIR || 'src/database/migrations/*.ts'],
...
}

现在使用 DB_MIGRATION_DIR=path/to/migration.ts npm run typeorm migration:run 运行您的特定迁移

强制重新运行迁移的另一个提示,但可能需要对连接字符串变量进行一些自定义 - 添加到您的 package.json 中:

{
  "scripts": {
    ...
    "migration:rerun": "psql postgresql://$DB_USER@localhost:5432/$DB_NAME -c "delete from migrations where name like '%$SEED_NAME%';" && DB_MIGRATION_DIR='$DB_MIGRATION_DIR' npm run typeorm migration:run"
    ...
  }
  ...
}