加载回数据库

时间:2018-06-29 01:19:52

标签: db2 liquibase

我的情况是从真实的DB2中导出数据,然后将其加载回以进行集成测试。我正在使用liquibase(v3.5.3)对其进行管理。

我发现在此周期内TIMESTAMP值已更改。导出时间戳记值后,我可以在changelog文件中将其视为“ 2018-06-28 22:47:38.816343”。之后,当我将其重新加载到DB2中时,它变为“ 2018-06-28 23:01:14.343”。

原因是,“ 816343”部分不被视为秒的一部分,而是毫秒量,并且该量被添加到结果时间戳中。

在测试中,通过比较这些时间戳来制定业务决策标准。我需要他们平等。

任何想法和建议都会受到赞赏。

有一些步骤可以复制:

1。创建包含内容的文件“ 01_test_data_to_setup.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>

2。使用liquibase update命令执行上述changelog文件

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

3。从数据库导出数据

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>

4。一个将导出的时间戳加载回数据库“ 02_test_data_to_load.xml”的文件

<?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

5。在数据库中检查导出和加载的时间戳,或者再导出一次TT表数据。

第二行中的TS_LOADED时间戳值与第一行中的TS_GENERATED值不同

1 个答案:

答案 0 :(得分:0)

我想这是Liquibase中的一个错误,类似于这个错误 https://liquibase.jira.com/browse/CORE-1958

或者您的数据类型是目标表上的TIMESTAMP(3)