我使用以下命令从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服务器中的另一个数据库吗?我需要进行自动数据类型转换。
我将非常感谢这些信息。谢谢大家。
答案 0 :(得分:1)
答案是 - 是。但有必要手动更正生成的文件中的数据类型。数据类型不会自动转换。
另见: