从changelog创建另一个数据库:自动数据类型转换问题

时间:2014-08-28 04:36:33

标签: database-migration liquibase

我使用以下命令从PostgreSQL数据库获取更改日志:

liquibase \
   --driver=org.postgresql.Driver \
   --classpath="C:\db_drivers\postgresql-9.3-1102.jdbc3.jar" \
   --changeLogFile="./postgresql_changelog.xml" \
   --url="jdbc:postgresql://localhost:5432/postgres" \
   --username=schema_name_here \
   --password=*** \ 
   --logLevel=debug \ 
   --defaultSchemaName=sep \
   generateChangeLog

这是postgresql_changelog.xml的一个片段:

...
<createTable tableName="table1">
    <column name="total_pk" type="INT8">
        <constraints nullable="false"/>
    </column>
    <column name="form_fk" type="INT8">
        <constraints nullable="false"/>
    </column>
    <column name="territory_fk" type="INT8">
        <constraints nullable="false"/>
    </column>
    <column name="parameter_fk" type="INT8">
        <constraints nullable="false"/>
    </column>
    <column name="enterprise_fk" type="INT8">
        <constraints nullable="false"/>
    </column>
    <column name="total_g" type="INT8">
        <constraints nullable="false"/>
    </column>
    <column name="total_data" type="date">
        <constraints nullable="false"/>
    </column>
    <column name="total_value" type="numeric(*, 2)">
        <constraints nullable="false"/>
    </column>
    <column name="variant_fk" type="INT8">
        <constraints nullable="false"/>
    </column>
    <column name="period_id" type="INT8">
        <constraints nullable="false"/>
    </column>
    <column name="total_q" type="INT8"/>
    <column name="total_m" type="INT8"/>
    <column name="increase" type="INT8"/>
    <column name="period_index" type="INT8"/>
    <column name="data_input" type="TIMESTAMP WITHOUT TIME ZONE"/>
    <column name="document_unid" type="VARCHAR(64)"/>
    <column name="value_comment" type="VARCHAR(512)"/>
    <column name="olap_year" type="SMALLINT"/>
    <column name="olap_month" type="SMALLINT"/>
    <column name="olap_week" type="SMALLINT"/>
    <column name="olap_day_of_month" type="SMALLINT"/>
    <column name="olap_quarter" type="VARCHAR(4)"/>
    <column name="olap_quarter_desc" type="VARCHAR(17)"/>
    <column name="olap_month_name" type="VARCHAR(8)"/>
    <column name="ediz_id" type="INT8">
        <constraints nullable="false"/>
    </column>
    <column name="olap_month_code" type="VARCHAR(10)"/>
    <column name="olap_month_caption" type="VARCHAR(64)"/>
</createTable>
... 

现在我想在另一个数据库(Oracle)中创建相同的对象和相同的关系:

liquibase \
   --driver=oracle.jdbc.OracleDriver \
   --classpath="C:\db_drivers\ojdbc14.jar" \
   --changeLogFile="./postgresql_changelog.xml" \
   --url="jdbc:oracle:thin:@ip_here:orabeta" \
   --username=*** \
   --password=*** \
   update

但它不起作用:ORA-00902

可以从一个数据库获取更改日志并从此更改日志更新不同RDBMS服务器中的另一个数据库吗?我需要进行自动数据类型转换。

我将非常感谢这些信息。谢谢大家。

1 个答案:

答案 0 :(得分:1)

答案是 - 。但有必要手动更正生成的文件中的数据类型。数据类型不会自动转换。

另见: