corda - Corda 节点使用 postgresql 和 schema 时结果集大于一行
问题描述
我目前正在尝试让 2 个节点(一个公证人,一个普通节点)使用相同的 Postgresql DB 存储数据(而不是嵌入式 H2),但每个节点使用不同的架构(节点架构,公证人架构)。
啊,顺便说一句,我用的是非企业版,4.3版。
公证节点是第一个启动的节点,它在公证模式中创建所需的表,那里一切似乎都很好。
但是当“正常”节点启动时,它会崩溃说:
[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 值。
我错过了什么吗?
编辑 :
在文档中,他们说:
如果您的 PostgresSQL 数据库为不同的 Corda 节点托管多个模式实例(使用 JDBC URL currentSchema=my_schema),您将需要为在第一个实例之后添加的每个后续模式手动创建一个 hibernate_sequence 序列对象。Corda 没有为 Hibernate 提供模式命名空间设置,并且可能不会创建序列对象。运行 DDL 语句并将 my_schema 替换为您的模式命名空间:
我已经这样做了,当连接到数据库时,我可以看到我创建的表的两个模式。虽然对于公证人,我有 32 个表,而“普通”节点只有 26 个。
解决方案
我试图对不同的节点使用不同的方案。但我失败了。因为有些自动创建的表没有scheme。所以我决定在同一个数据库服务器上使用不同的数据库实例。
我认为这种方法可能会减轻您的痛苦。
推荐阅读
- javascript - 如何在链接元素的 onClick 触发前调用函数 Next.js
- android - StrictMode 策略违规:android.os.strictmode.NonSdkApiUsedViolation: Lcom/android/org/conscrypt/ConscryptEngineSocket;->setHostname(
- hdf5 - AttributeError:“数据集”对象没有属性“值”
- flutter - Flutter:如何设置后台定时器
- r - 拉普拉斯矩阵,解决电阻网格问题
- node.js - 使用 nodejs 阅读和发布 pdf
- c# - 使用 C# 将值写入 Excel
- sql - 在一列中创建一个具有默认值的空表
- python - Python sqlite 使用 json 更新
- r - 在R中的每一列中查找大于数字的元素的更简单的函数