我试图通过postgres函数插入数据,但我无法让它工作。我收到错误说明
错误:函数unnest(整数)不存在 SQL状态:42883 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。
我正在使用Postgres 9.5,我的功能如下:
CREATE FUNCTION insert_multiple_arrays(
some_infoid INTEGER[],
other_infoid INTEGER[],
some_user_info VARCHAR,
OUT new_user_id INTEGER
)
RETURNS INTERGER AS $$
BEGIN
INSERT INTO user_table (user_info) VALUES ($3) RETURNING user_id INTO new_user_id;
INSERT INTO some_info_mapper (user_id, some_info_id) SELECT new_user_id, unnest($1);
INSERT INTO other_info_mapper (user_id, other_info_id) SELECT new_user_id,unnest($2);
END;
$$ LANGUAGE plpgsql;
我将通过SELECT语句从后端调用存储过程。一个例子是这样的:
createUser(user, callback){
let client = this.getDb();
client.query("SELECT insert_multiple_arrays($1, $2, $3)",
[user.some_info_ids, user.other_info_ids, user.info], function(err, results){
if(err){
callback (err);
}
callback(null, results);
});
};
我期待的输出如下:
user_table
user_id | user_info |
----------------------+-----------------+
1 | someInfo |
some_info_mapper
user_id | some_info_id |
----------------------+-----------------+
1 | 33 |
1 | 5 |
other_info_mapper
user_id | other_info_id |
----------------------+-----------------+
1 | 8 |
1 | 9 |
1 | 22 |
1 | 66 |
1 | 99 |
如何处理此错误?我是否需要对我的数据进行某种处理以将其置于postgres接受的格式中?
答案 0 :(得分:1)
您使用三个参数调用insert_multiple_arrays
,但显示定义为四个。也许你有一个旧的3参数版本仍然潜伏在那里,马车,并试图找到实际上没有使用的4参数版本中的错误?
答案 1 :(得分:0)
在探索了@cachiques评论之后,似乎数据没有正确发送。事实证明,传递给后端的数据是一个需要进一步解析的数组对象。解析后,sql运行正常。这是我用来从服务器端解析的代码,它将被发送到sql查询:
user.other_info_ids = req.body.other_info.map( function(obj) { return obj.info_id; } );