如何使用 Liquibase 脚本将数据从一个表复制到另一个表

问题描述 投票:0回答:2

我想知道使用 Corda 的 Liquibase 进行以下测试(将数据从一个表复制到另一个表)的解决方案。

案例:作为我想在现有数据库中创建一个新表的一部分,该数据库已经有一个名为 TableA 的表(其中包含 id、name、value 列),其中包含一些数据初始化,我创建了一个 TableB(具有相同的 id) 、名称、值列),我想将数据从 TableA 复制到 TableB。

为此,我按照 Liquibase 中的建议使用了以下 liquibase 脚本,为了测试,我已连接到 PostgreSQL 数据库并连接了名为“corda_schema”的模式,其中包含表。

<changeSet author="liquibase.corda" id="update-table">
      <update schemaName="corda_schema" tableName="TableB">
        <column name="id" valueComputed="(SELECT id from TableA)"/>
    <column name="name" valueComputed="(SELECT name from TableA)"/>
    <column name="value" valueComputed="(SELECT value from TableA)"/>
      </update>
</changeSet>

当我尝试使用 Liquibase 更新脚本时,出现以下错误

错误:liquibase.corda 失败
错误:在 SQL 语句中找不到架构“CORDA_SCHEMA”

如果我没有像这样在更新中给出架构名称

<update tableName="TableB">
    <column name="value" valueComputed="(SELECT value from TableA)"/>
</update>

Liquibase 正在公共模式中搜索 TableA,我收到此错误:

错误:liquibase.corda 失败错误:在 SQL 语句中找不到架构“PUBLIC”`

我还通过创建表本身尝试了这个Liquibase脚本changeSet我尝试更新数据,这个changeSet正在运行并且创建了表但数据没有被复制。

<changeSet author="liquibase.corda" id="update-table">
  <createTable schemaName = "corda_schema" tableName="TableB">
    <column name="id" valueComputed= "(SELECT id FROM TableA)"/>
</createTable>
</changeSet>

请提出我遗漏的任何内容或任何其他用法,以使我的测试成功将数据从一个表获取到另一个表。

提前致谢。

sql database migration liquibase corda
2个回答
1
投票

我建议只使用自定义sql:

<changeSet author="liquibase.corda" id="insert-table">
      <sql>
        insert into corda_schema.TableB
        select id,name,value from corda_schema.TableA;
      </sql>
</changeSet>

0
投票

您不认为当您将其放入列标记的 valueCompulated 属性时,必须在 tableA 名称中声明您的模式吗?

看起来应该是这样

<column name="id" valueComputed="(SELECT id from corda_schema.TableA)"/>
© www.soinside.com 2019 - 2024. All rights reserved.