我正在尝试定义一个基于 PersistedModel 的模型来访问 DB2 中的表,称之为
MY_SCHEMA.MY_TABLE
。
我基于 PersistedModel 创建了模型
MY_TABLE
,并带有数据源 (datasources.json
),其中定义包含属性 "schema": "MY_SCHEMA"
。 数据源还包含用于连接的用户 ID my_userid
。
当我尝试调用此模型的 API 时,它会尝试访问表
my_userid.MY_TABLE
。
它应该访问
MY_SCHEMA.MY_TABLE
。
DB2 实例恰好位于 System Z 上。我创建了一个名为
my_userid.MY_TABLE
的表,这将起作用,但是对于我们尝试构建的解决方案,需要多个模式。
请注意,这似乎只是 System Z 上的 Db2 的问题。我可以更改 Db2 LUW 上的架构。
您使用什么 LoopBack 连接器?什么版本?您还可以检查您的
loopback-ibmdb
文件夹中安装了哪个版本的 node_modules
吗?
AFAICT,LoopBack 的 DB2 相关连接器支持
schema
字段,请参阅 https://github.com/strongloop/loopback-ibmdb/blob/master/lib/ibmdb.js#L96-L100
self.schema = this.username;
if (settings.schema) {
self.schema = settings.schema.toUpperCase();
}
self.connStr += ';CurrentSchema=' + self.schema;
您是否考虑过使用
DSN
而不是像 hostname
和 username
这样的单独字段来配置数据库连接?
在您的数据源配置 JSON 中:
"dsn": "DATABASE={dbname};HOSTNAME={hostname};UID={username};PWD={password};CurrentSchema=MY_SCHEMA"
我也遇到了类似的问题,并且在这个问题上困扰了近3天。 我最初使用的是不同的 dsn,其中我针对
schema
引用了架构名称,但我按照 Miroslav 的建议更改了它,并且它起作用了。
我以前的dsn:
"dsn": "DATABASE={dbname};HOSTNAME={hostname};UID={username};PWD={password};Schema=MY_SCHEMA"
正确的 dsn 格式:
"dsn": "DATABASE={dbname};HOSTNAME={hostname};UID={username};PWD={password};CurrentSchema=MY_SCHEMA"