Ich versuche, Daten über eine Postgres-Funktion einzufügen, und ich kann es nicht ganz funktionieren. Ich erhalte eine Fehlermeldung,Postgres-Funktion zum Einfügen von Arrays
ERROR: function unnest(integer) does not exist SQL state: 42883 Hint: No function matches the given name and argument types. You might need to add explicit type casts.
ich Postgres bin mit 9,5, und meine Funktion ist wie folgt:
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;
Ich werde die gespeicherte Prozedur aus meinem Backend über eine SELECT-Anweisung anrufen. Ein Beispiel dafür ist etwa so:
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);
});
};
Die Ausgabe, die ich würde erwarte wie folgt:
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 |
Wie gehe ich diesen Fehler? Muss ich meine Daten irgendwie verarbeiten, um sie in ein Format zu bringen, das Postgres akzeptiert?
Welche sind 'user.some_info_ids' und' user.other_info_ids'? Sind sie ganze Zahlen? Das ist es, was der Fehler sagt. – cachique
Ja, die Felder sind Ganzzahlen, ebenso wie die SQL-Abfrageparameter. –
1 - Die Felder müssen ein Array von ganzen Zahlen sein, nicht nur ganze Zahlen. und 2- Ihr Treiber muss die Übergabe von Arrays in vorbereiteten Anweisungen unterstützen. Welche Sprache/Treiber-Version verwenden Sie in Ihrem Telefoncode? – cachique