Postgres函数插入数组

时间:2016-06-27 16:07:44

标签: sql database postgresql database-design

我试图通过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接受的格式中?

2 个答案:

答案 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; } );