postgresql 在现有表中添加一列,并根据Liquibase中的ID仅从csv文件加载所需列的值

vs3odd8k  于 2023-03-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(92)

我有一个表table1,其中包含以下列和示例数据:
| 身份证|色谱柱1|
| --------------|--------------|
| 1|美国广播公司|
| 二|def|
我需要添加一个列和输出将是这样的后,使用下面

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

    <changeSet id="add-date-column" author="gwylimwilliams">

        <addColumn tableName="table1">
             <column name="column2" type="date">
             </column>
        </addColumn>
    </changeSet>
</databaseChangeLog>

使用上述模式后,新列将像这样添加:
| 身份证|色谱柱1|色谱柱2|
| --------------|--------------|--------------|
| 1|美国广播公司||
| 二|def||
你可以看到第2列是空的,现在我想从.csv文件中加载这个列值,基于id。我不想触摸column1值。我知道如何加载数据和uploadLoadData在那里,我们可以使用跳过,但我们如何插入条件,或者我们有任何最好的方法来实现这一点,我们在csv文件中有所有列数据,只想根据id插入column 2数据

<changeset author="gwylimwilliams" id="update-column">
   <loadData
     file="abc.csv"
     seperator=","
     tableName = "table1" >
     <column name="column1" type="skip"/>
     <column name="column2" type="datetime"/>
   </loadData>
</changeset>
8ehkhllq

8ehkhllq1#

假设id列存在于表中,那么您可以使用loadUpdateData

<changeset author="gwylimwilliams" id="update-column">
   <loadUpdateData file="abc.csv" separator="," 
                   tableName = "table1" primaryKey="id">
     <column name="id"/>
     <column name="column1" type="skip"/>
     <column name="column2"/>
   </loadUpdateData>
</changeset>

相关问题