我正在使用 postgresql-db 开发 nodejs 项目。 我已经为数据库创建了一个带有表的 schema ,现在我已经创建了一个文件,其中包含一些准备好的数据(多行)要插入。为此,我遵循了此项的说明:Multi-row insert with pg-promise。
问题是,我得到以下错误: {错误:关系“ tenantx.ObjectGroup”不存在 ...但是确实存在。我还可以从我的api中看到,当我想读取表内容时,它将返回一个空对象。 可以使用“ schema.table”声明吗?
准备好的数据的代码如下:
'use strict';
const pgp = require('pg-promise')({
// Initialization Options
});
const csObjectGroup = new pgp.helpers.ColumnSet(['objectgroup', 'description'], {
table: 'tenantx.ObjectGroup'
});
// data input values:
const valuesObjectGroup = [{
objectgroup: 'bla',
description: 'bla'
}, {
objectgroup: 'blu',
description: 'blu'
}, {
objectgroup: 'bla',
description: 'bla'
}];
module.exports = {
csObjectGroup: csObjectGroup,
valuesObjectGroup: valuesObjectGroup
}
以及从api调用以设置内容的代码: //将准备好的数据插入表中
function initializeData(pTenantId, dbUri) {
var dbPostgres = dbUri;
const datafile = require("./../Data/data_" + pTenantId);
var statements = [];
var valuesObjectGroup = datafile.valuesObjectGroup;
var csObjectGroup = datafile.csObjectGroup;
statements.push(valuesObjectGroup, csObjectGroup);
var i, query;
for (i = 0; i < statements.length - 1; i += 2) {
query = pgp.helpers.insert(statements[i], statements[i + 1]);
dbPostgres.none(query)
.then(data => {
console.log("+++++ Data successfully initialized.");
})
.catch(err => {
console.log("----- Data could not be initialized.");
console.log(err);
});
}
return true;
}
我已经从中创建了表格:
const createObjectGroupTable =
'CREATE TABLE IF NOT EXISTS tenantx.ObjectGroup \
( \
id serial, \
objectgroup varchar(50), \
description varchar(100), \
PRIMARY KEY (id) \
)';
答案 0 :(得分:1)
如果您更加关注所报告的错误:
{错误:关系“ tenantx.ObjectGroup”不存在...
那不是"tenantx"."ObjectGroup"
,那只是一个表名"tenantx.ObjectGroup"
。
问题出在表的声明方式上
const csObjectGroup = new pgp.helpers.ColumnSet(['objectgroup', 'description'], {
table: 'tenantx.ObjectGroup'
});
您无需全部提供架构+表名,而是将其全部指定为表名,因此可以对其进行转义。
可以通过以下方式之一来指定模式+表的正确方法:
table: {schema: 'tenantx', table: 'ObjectGroup'}
或:
table: new pgp.helpers.TableName('ObjectGroup', 'tenantx')
或:
table: new pgp.helpers.TableName({table: 'ObjectGroup', schema: 'tenantx'})
请参阅API:TableName。