如何将多个SQL迁移文件合并为单个文件(仅保留Up命令)
脱离编程语言/框架合并SQL迁移Up命令为单一文件
要把所有Up迁移文件里的有效变更命令按顺序合并成一个最终文件,直接用系统自带的命令行工具就能搞定,步骤如下:
1. 筛选并排序Up文件
确保你在存放所有SQL迁移文件的目录下,先列出所有带_up.sql后缀的文件,并按时序命名规则排序(比如你给的000001、000002这类数字前缀,自然排序即可):
ls -1 *up.sql | sort -n
如果文件名版本号格式特殊(比如带字母),用sort -V按版本号规则排序更稳妥。
2. 提取Up部分并合并
分两种场景处理:
场景一:Up文件同时包含Up和Down块
这类文件里有-- +migrate Up和-- +migrate Down标记,需要只提取Up块内的内容(排除Down块),运行以下命令就能把所有内容合并到final_migration.sql:
for file in $(ls -1 *up.sql | sort -n); do sed -n '/^-- +migrate Up/,/^-- +migrate Down/{/^-- +migrate Down/!p}' "$file" done > final_migration.sql
如果连-- +migrate Up这个注释也想去掉,用下面的命令过滤掉标记行:
for file in $(ls -1 *up.sql | sort -n); do sed -n '/^-- +migrate Up/,/^-- +migrate Down/{/^-- +migrate Up/!{/^-- +migrate Down/!p}}' "$file" done > final_migration.sql
场景二:Up文件仅包含Up命令
如果每个_up.sql文件里全是要执行的变更命令,直接合并即可:
cat $(ls -1 *up.sql | sort -n) > final_migration.sql
3. 校验结果
合并完成后,打开final_migration.sql检查一遍,确保命令顺序正确,没有多余的Down块内容或重复语句,确认无误后就能直接用这个文件初始化数据库。
内容的提问来源于stack exchange,提问作者Vasin Yuriy
相关产品推荐
相关产品推荐

