Corda 当节点使用postgresql和架构时,结果集大于一行
我目前正在尝试让2个节点(一个公证人,一个普通节点)使用相同的Postgresql DB存储数据(而不是嵌入的H2),但每个节点都有不同的模式(节点模式,公证人模式) 啊,我用的是非企业版,顺便说一句,4.3版 公证人节点是第一个启动的节点,它在公证人模式中创建所需的表,所有这些看起来都很好 但当“正常”节点启动时,它会崩溃,原因是:Corda 当节点使用postgresql和架构时,结果集大于一行,corda,Corda,我目前正在尝试让2个节点(一个公证人,一个普通节点)使用相同的Postgresql DB存储数据(而不是嵌入的H2),但每个节点都有不同的模式(节点模式,公证人模式) 啊,我用的是非企业版,顺便说一句,4.3版 公证人节点是第一个启动的节点,它在公证人模式中创建所需的表,所有这些看起来都很好 但当“正常”节点启动时,它会崩溃,原因是: [ERROR] 10:17:50+0000 [main] changelog.ChangeSet. - Change Set migration/node-cor
[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_模式),则需要为第一个实例之后添加的每个后续模式手动创建hibernate_sequence对象。Corda没有为Hibernate提供模式名称空间设置,并且可能不会创建序列对象。运行DDL语句并将my_模式替换为您的模式命名空间:
我已经这样做了,当连接到db时,我可以看到我创建的两个表的模式的taht。虽然对于公证人,我有32个表,对于“正常”节点只有26个表。的经典案例,解决方案是:
如果PostgresSQL数据库为不同的Corda节点托管多个模式实例(使用JDBC URL currentSchema=my_模式),则需要为第一个实例之后添加的每个后续模式手动创建hibernate_sequence对象。Corda没有为Hibernate提供模式名称空间设置,并且可能不会创建序列对象。运行DDL语句并将my_模式替换为您的模式命名空间:
我尝试对不同的节点使用不同的方案。但我失败了。因为有一些自动创建的表没有scheme。所以我决定在同一个db服务器上使用不同的数据库实例
我想这个方法可能会减轻你的痛苦。哦,真的吗?到目前为止,我的设置没有发现任何问题(每个节点1个模式)。你能告诉我更多关于哪些桌子给你带来麻烦吗?