首页 > 解决方案 > Corda Finance 数据库表迁移失败从 Corda 3 升级到 Corda 4

问题描述

在将我的数据库从 Corda 3 升级到 Corda 4 时,我遇到了来自 Corda Finance 的表的以下错误:

net.corda.nodeapi.internal.persistence.CouldNotCreateDataSourceException: Could not create the DataSource: Migration failed for change set migration/cash-schema-v1.changelog-master.sql::initial_schema_for_CashSchemaV1::R3.Corda.Generated:
   Reason: liquibase.exception.DatabaseException: ERROR: relation "contract_cash_states" already exists [Failed SQL: create table contract_cash_states (
    output_index int4 not null,
    transaction_id varchar(64) not null,
    ccy_code varchar(3),
    issuer_key_hash varchar(130),
    issuer_ref bytea,
    owner_name varchar(255),
    pennies int8,
    primary key (output_index, transaction_id)
  )]

该表已经存在,Corda 正在尝试再次创建它。

标签: corda

解决方案


Corda Finance 3.3 不包括 liquibase 升级所需的迁移脚本。运行这个迁移脚本将迁移添加到 liquibase 表中会告诉 Corda 该表已经创建。

INSERT INTO <database>.databasechangelog 
(ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, DESCRIPTION, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) 
VALUES ('initial_schema_for_CashSchemaV1', 'R3.Corda.Generated', 'migration/cash-schema-v1.changelog-master.sql', NOW(), 103, '7:0d961b1ab64deec263ba638e609357d0', 'sql', '', 'EXECUTED', NULL, NULL, '3.5.4', '2774745582');
INSERT INTO <database>.databasechangelog 
(ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, DESCRIPTION, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) 
VALUES ('initial_schema_for_CommercialPaperSchemaV1', 'R3.Corda.Generated', 'migration/commercial-paper-schema-v1.changelog-master.sql', NOW(), 98, '7:ee782f59d8cd3b74c7b26f5cfcba3fdd', 'sql', '', 'EXECUTED', NULL, NULL, '3.5.4', '2774745582’);

推荐阅读