如何移除文件每行末尾分号 适配Liquibase加载数据到SQL数据库
解决方案
行尾多余的分号会导致Liquibase按;切分行数据时,识别出额外的空列,最终抛出列数不匹配的错误,你可以根据实际场景二选一处理:
方案1:预处理源文件移除行尾分号(无版本兼容问题,推荐)
直接通过命令批量删除txt文件所有行尾的分号,处理完成后你现有的Liquibase配置不需要任何改动即可正常运行:
- Linux/macOS 系统,在names.txt所在目录执行sed命令:
sed -i 's/;$//' names.txt
- Windows 系统,在names.txt所在目录执行PowerShell命令:
# 无特殊编码需求用这个 (Get-Content names.txt) -replace ';$', '' | Set-Content names.txt # 如果文件是UTF8编码、处理后出现乱码,用这个版本 (Get-Content names.txt -Encoding UTF8) -replace ';$', '' | Set-Content names.txt -Encoding UTF8
方案2:不修改源文件,调整Liquibase加载配置
如果你不方便改动原始txt文件,可以直接在loadData标签上增加ignoreExtraColumns="true"属性,配置后Liquibase会自动忽略数据文件中存在、但未被表结构/列映射定义的多余列,不会触发列匹配错误。
修改后的loadData配置片段如下:
<loadData file="names.txt" relativeToChangelogFile="true" schemaName="test" separator=";" ignoreExtraColumns="true" tableName="names"> <column header="id" name="id" type="bigint"/> <column header="name" name="name" type="varchar(255)"/> <column header="secondName" name="secondName" type="varchar(255)"/> </loadData>
注意:
ignoreExtraColumns属性从Liquibase 3.5版本开始支持,如果你使用的Liquibase版本低于3.5,请选择方案1处理。
内容的提问来源于stack exchange,提问作者michal211001
相关产品推荐
相关产品推荐

