Результирующий набор превышает одну строку, когда узел Corda использует postgresql и схему - PullRequest
0 голосов
/ 17 февраля 2020

В настоящее время я пытаюсь, чтобы 2 узла (один нотариус, один нормальный узел) использовали одну и ту же базу данных Postgresql для хранения данных (вместо встроенного H2), но с разными схемами для каждого (схема узла, нотариус схема).

Ах, я использую не корпоративную версию btw версии 4.3.

Нотариальный узел запускается первым, он создает необходимые таблицы в нотариальной схеме там все вроде нормально.

Но когда «нормальный» узел загружается, он говорит sh:

[ERROR] 10:17:50+0000 [main] changelog.ChangeSet. - Change Set migration/node-core.changelog-postgres-blob.xml::modify checkpoint_value column type::R3.Corda failed.  Error: Migration failed for change set mig │
│      Reason:                                                                                                                                                                                                      │
│           master.changelog.json : liquibase.precondition.core.SqlPrecondition@7c682e26 : Result set larger than one row                                                                                           │
│  {changeSet=migration/node-core.changelog-postgres-blob.xml::modify checkpoint_value column type::R3.Corda, databaseChangeLog=master.changelog.json}                                                              │
│ [ERROR] 10:17:50+0000 [main] internal.NodeStartupLogging. - Exception during node registration: Could not create the DataSource: Migration failed for change set migration/node-core.changelog-postgres-blob.xml: │
│      Reason:                                                                                                                                                                                                      │
│           master.changelog.json : liquibase.precondition.core.SqlPrecondition@7c682e26 : Result set larger than one row                                                                                           │
│  [errorCode=14m37zv, moreInformationAt=https://errors.corda.net/OS/4.3/14m37zv]                                                                                                                                   │
[ERROR] 10:17:50+0000 [main] internal.NodeStartupLogging. - Exception during node startup: net.corda.core.utilities.Try$Failure cannot be cast to net.corda.core.utilities.Try$Success [errorCode=rmnkpl, moreInf │

У меня есть node.conf для нотариуса:

dataSourceProperties: {
    dataSourceClassName="org.postgresql.ds.PGSimpleDataSource"
    dataSource.url="jdbc:postgresql://psql-path:5432/postgres?currentSchema=notary"
    dataSource.user="dbUser"
    dataSource.password="xxxxxx"
}

А для «нормального» узла:

dataSourceProperties: {
    dataSourceClassName="org.postgresql.ds.PGSimpleDataSource"
    dataSource.url="jdbc:postgresql://psql-path:5432/postgres?currentSchema=node"
    dataSource.user="dbUser"
    dataSource.password="xxxxxx"
}

Итак, как вы можете видеть, единственная разница - значение? CurrentSchema.

Я что-то упустил?

РЕДАКТИРОВАТЬ:

в do c, они говорят:

Если ваш Postgres База данных SQL содержит несколько экземпляров схемы (используя URL-адрес JDB C currentSchema = my_schema) для различных узлов Corda. создайте объект последовательности hibernate_sequence вручную для каждой последующей схемы, добавленной после первого экземпляра. Corda не предоставляет Hibernate настройку пространства имен схемы, и объект последовательности может быть не создан. Запустите оператор DDL и замените my_schema пространством имен вашей схемы:

Я сделал это, и при подключении к БД я вижу, что для обеих схем у меня есть созданные таблицы. Хотя для нотариуса у меня есть 32 таблицы и только 26 для «нормального» узла.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

Я пытался использовать разные схемы для разных узлов. Но я не смог. Потому что есть некоторые автоматически созданные таблицы без схемы. Поэтому я решил использовать разные экземпляры базы данных на одном сервере БД.

Я думаю, что этот метод может немного облегчить вашу боль.

0 голосов
/ 20 февраля 2020

Classi c случай документации с видом , решение:

Если ваша база данных PostgresSQL содержит несколько экземпляров схемы (с использованием JDB C URL currentSchema = my_schema) для разных узлов Corda, вам нужно будет создать объект последовательности hibernate_sequence вручную для каждой последующей схемы, добавленной после первого экземпляра. Corda не предоставляет Hibernate настройку пространства имен схемы, и объект последовательности может быть не создан. Запустите оператор DDL и замените my_schema вашим пространством имен схемы:

...