Узел не запускается после добавления дополнительного столбца в CashSchemaV1 при использовании PostgreSQL - PullRequest
0 голосов
/ 04 июля 2019

Добавлен дополнительный столбец xyz в CashSchemaV1. Я могу запустить узел с H2 db, но при использовании PostgreSQL выдает следующую ошибку:

[ERROR] 14:52:11+0530 [main] internal.NodeStartupLogging.invoke - Exception during node startup: Incompatible schema change detected. Please run the node with database.initialiseSchema=true. Reason: Schema-validation: missing column [xyz] in table [contract_cash_states]

Подписано https://docs.corda.r3.com/database-management.html#database-management-scripts

Добавлен столбец xyz в https://github.com/corda/corda/blob/master/finance/workflows/src/main/resources/migration/cash.changelog-init.xml

<column name="pennies" type="BIGINT"/>
<column name="xyz" type="NVARCHAR(130)"/>

затем ретроспективно добавил сценарии миграции базы данных в существующий CorDapp. После этого попытался запустить узел, но получил следующую ошибку:

[ERROR] 14:52:11+0530 [main] internal.NodeStartupLogging.invoke - Exception during node startup: Incompatible schema change detected. Please run the node with database.initialiseSchema=true. Reason: Schema-validation: missing column [xyz] in table [contract_cash_states]

CashSchemaV1.kt https://github.com/corda/corda/blob/master/finance/contracts/src/main/kotlin/net/corda/finance/schemas/CashSchemaV1.kt

@Type(type = "corda-wrapper-binary")
            var issuerRef: ByteArray,

            @Column (name = "xyz")
            var xyz: String

    ) : PersistentState()
}

Сценарий миграции сгенерирован cash-schema-v1.changelog-master.sql

--liquibase formatted sql

--changeset R3.Corda.Generated:initial_schema_for_CashSchemaV1

    create table contract_cash_states (
       output_index int4 not null,
        transaction_id varchar(64) not null,
        ccy_code varchar(3) not null,
        issuer_key_hash varchar(130) not null,
        issuer_ref bytea not null,
        owner_name varchar(255),
        pennies int8 not null,
        xyz varchar(255),
        primary key (output_index, transaction_id)
    );
create index ccy_code_idx on contract_cash_states (ccy_code);
create index pennies_idx on contract_cash_states (pennies);

Схема должна быть создана со всеми столбцами, указанными в CashSchemaV1

1 Ответ

0 голосов
/ 10 июля 2019

Выполнены шаги для добавления дополнительного столбца: 1) Добавлено <column name="xyz" type="NVARCHAR(130)"/> в cash.changelog-init.xml 2) Добавлено <addNotNullConstraint tableName="abc_states" columnName="xyz" columnDataType="NVARCHAR(130)"/> в cash.changelog-v1.xml

Построил cordapp, а затем запустил узел, используя это, узел успешно запустился.

...