gpt4 book ai didi

liquibase - loadUpdateData 总是插入整个 CSV

转载 作者:行者123 更新时间:2023-12-05 00:49:29 24 4
gpt4 key购买 nike

我希望能够编辑我的 CSV 文件的内容,并且每次对其进行更改时,都会添加/修改/删除相应的记录。

使用 loadUpdateData 加上 runOnChange="true",每次 CSV 发生变化时,整个 CSV 内容都会重新插入到 DB 中,导致大量重复。

在 MySql Community Server 5.7 中使用 liquibase maven 插件 3.0.5

<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">

<changeSet author="foobar" id="fizzbuzzDataLoad" runOnChange="true">
<loadUpdateData
encoding="UTF-8"
file="src/main/resources/liquibase/fizzbuzz.csv"
quotchar=""
separator=","
primaryKey="ïntA"
tableName="fizzbuzz">
<column name="intA" type="NUMERIC"/>
<column name="output" type="STRING"/>
</loadUpdateData>
</changeSet>
</databaseChangeLog>

示例

文件的初始状态 --> 表为空时插入的所有行:

intA,Output
1,1
2,2
3,FIZZ
4,4
5,BUZZ
6,FIZZ

添加新行 --> 再次插入所有行

7,7

数据库如下所示:

  intA  Output
1 1
2 2
3 FIZZ
4 4
5 BUZZ
6 FIZZ
1 1
2 2
3 FIZZ
4 4
5 BUZZ
6 FIZZ
7 7

最佳答案

我真傻,intA 在其创建表更改日志中没有被标记为主键。这解决了眼前的问题。如果检测到键冲突,它将更新值。

也就是说,如果我从 CSV 中删除一行,它会保留在数据库中。我通过让 Liquibsae 总是截断表然后运行 ​​loadData 来插入所有新数据来解决这个问题。

<changeSet author="fooBar" id="fizzbuzzDataClear"
runAlways="true">
<delete tableName="fizzBuzz">
</delete>
</changeSet>

<changeSet author="fooBar" id="fizzbuzzDataLoad"
runAlways="true">
<loadUpdateData encoding="UTF-8"
file="src/main/resources/liquibase/data/fizzbuzz.csv" quotchar=""
separator="," primaryKey="ïntA" tableName="fizzbuzz">
<column name="intA" type="NUMERIC" />
<column name="output" type="STRING" />
</loadUpdateData>
</changeSet>

关于liquibase - loadUpdateData 总是插入整个 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39726532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com