使用liquibase

时间:2017-09-01 15:14:56

标签: database postgresql liquibase

我想将一组表从一个模式复制到同一个数据库上的另一个模式。我在Ubuntu上使用postgres v9,我们使用Liquibase对我们的数据库进行任何更改。

我可以使用类似于下面的代码创建新表,但我需要将新表创建为select * from another table

<changeSet author="jDoe" id="1">
    <createTable tableName="abcproxy">
        <column name="errtime" type="datetime">
            <constraints primaryKey="true" nullable="false"/>
        </column>
        <column name="errmsg" type="varchar(255)">
            <constraints nullable="false"/>
        </column>
        <column name="version" type="integer">
            <constraints nullable="false"/>
        </column>
    </createTable>

我知道我们可以通过提到here的sql来做到这一点,但我想通过Liquibase XML配置来实现。另外,如果我们可以使用liquibase配置来复制授权/特权,那就太棒了。

我可以尝试按照提到的here移动表格,但截至目前,我的要求是复制而不是移动表格。

请告诉我任何有关实现这一目标的建议。感谢。

1 个答案:

答案 0 :(得分:1)

您可以在sql内使用changeSet标记,例如:

<changeSet author="jDoe" id="1">
    <precondition onFail="MARK_RUN">
        <not>
            <tableExists tableName="abcproxy" schemaName="newSchema"/>
        </not>
    </precondition>
    <sql>create table newSchema.abcproxy as select * from oldSchema.abcproxy</sql>
</changeSet>

Althow,这种方法存在一个问题:这个changeSet将复制旧模式中表中的所有数据,但不会复制密钥。