I have a PostgresQL function that returns multiple resultsets. I can extract these resultsets in .net without a problem (so I know my function works correctly), but I am having trouble doing so with node-postgres.
The result object returns an array of 7 items which matches the number of datasets returned.
In Node, the each of the 7 rows simply contains a string of <unnamed portal 1>
.
connection.query("BEGIN");
connection.query({text: "SELECT getoperationaldatasetmodel($1)", values : [clientid]}, function(err, results) {
if (err) {
connection.query("COMMIT");
self.pool.release(connection);
callback(err);
}
else {
var opsDataset = null;
var rows = results.rows;
// this returns 7 rows but the rows do not contain data but rather the name of the dataset.
}
So: does node-postgres support multiple result sets and if yes, any suggestions on how to extract?
EDIT: Here is the code I used with node-postgres should someone else need to use it in the future.
// must wrap in a transaction otherwise won't be able to see the multiple sets.
connection.query("BEGIN");
connection.query({text: "SELECT myfunction($1)", values : [clientid]}, function(err, results) {
if (err) {
// handle error here
connection.query("COMMIT;");
}
else {
connection.query('FETCH ALL FROM "<unnamed portal 1>"', function(err, r1) {
// r1.rows will contain the data for the first refcursor
});
connection.query('FETCH ALL FROM "<unnamed portal 2>"', function(err, r2) {
// r2.rows will contain the data for the second refcursor
});
// remember to handle the closure of the transaction
});