我知道typeorm migration:run
将运行所有迁移文件,但是有时我想运行insert
文件或修改后的文件。但是我找不到任何文档。怎么做,谢谢。
答案 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"
...
}
...
}