我的情况是从真实的DB2中导出数据,然后将其加载回以进行集成测试。我正在使用liquibase(v3.5.3)对其进行管理。
我发现在此周期内TIMESTAMP值已更改。导出时间戳记值后,我可以在changelog文件中将其视为“ 2018-06-28 22:47:38.816343”。之后,当我将其重新加载到DB2中时,它变为“ 2018-06-28 23:01:14.343”。
原因是,“ 816343”部分不被视为秒的一部分,而是毫秒量,并且该量被添加到结果时间戳中。
在测试中,通过比较这些时间戳来制定业务决策标准。我需要他们平等。
任何想法和建议都会受到赞赏。
有一些步骤可以复制:
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<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.5.xsd">
<changeSet author="OK" id="1">
<createTable tableName="TT">
<column name="TS_LOADED" type="TIMESTAMP"/>
<column name="TS_GENERATED" type="TIMESTAMP" defaultValueComputed="CURRENT_TIMESTAMP">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet author="OK" id="2">
<insert tableName="TT">
<column name="TS_LOADED"/>
</insert>
</changeSet>
</databaseChangeLog>
liquibase.bat --driver = com.ibm.db2.jcc.DB2Driver --logLevel = info --classpath =〜jdbc驱动程序路径〜--changeLogFile = 01_test_data_to_setup.xml --url = jdbc:db2:〜 jdbc url〜〜--defaultSchemaName =〜schema name〜--username =〜username ~~ --password =〜password〜update
liquibase.bat --driver = com.ibm.db2.jcc.DB2Driver --logLevel = info --classpath =〜jdbc驱动程序路径〜--changeLogFile = db2_exported_test_data.xml --url = jdbc:db2:〜 jdbc url〜〜--defaultSchemaName =〜schema name〜--username =〜username〜〜--password =〜password〜〜--diffTypes =“ data” generateChangeLog --includeObjects =“ table:TT”
因此,您将拥有“ db2_exported_test_data.xml”文件
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<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.5.xsd">
<changeSet author="OK" id="1">
<createTable tableName="TT">
<column name="TS_LOADED" type="TIMESTAMP"/>
<column name="TS_GENERATED" type="TIMESTAMP" defaultValueComputed="CURRENT_TIMESTAMP">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet author="OK" id="2">
<insert tableName="TT">
<column name="TS_LOADED"/>
</insert>
</changeSet>
</databaseChangeLog>
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
<changeSet author="OK (generated)" id="1530226079041-1">
<insert tableName="TT">
<column name="TS_LOADED"/>
<column name="TS_GENERATED" valueDate=~your generated timestamp value here. in my case it's "2018-06-28 22:47:38.816343"/>
</insert>
</changeSet>
</databaseChangeLog>
Liquibase命令
liquibase.bat --driver = com.ibm.db2.jcc.DB2Driver --logLevel = info --classpath =〜jdbc驱动程序路径〜--changeLogFile = 02_test_data_to_load.xml --url = jdbc:db2:〜 jdbc url〜〜--defaultSchemaName =〜schema name〜--username =〜username ~~ --password =〜password〜update
第二行中的TS_LOADED时间戳值与第一行中的TS_GENERATED值不同
答案 0 :(得分:0)
我想这是Liquibase中的一个错误,类似于这个错误 https://liquibase.jira.com/browse/CORE-1958
或者您的数据类型是目标表上的TIMESTAMP(3)