Ich versuche, Cursor Seitennummerierung mit Postgresql und Sequelize zu implementieren, habe ich mit Erfolg versucht, einen Cursor mit HOLD auf eine Transaktion und Abrufen von Daten aus ihm.Sequelize und WITH HOLD Cursor
sequelize.transaction(function (t) {
const query = "DECLARE my_cur CURSOR WITH HOLD FOR SELECT foo, bar FROM x " +
"WHERE time=\'2016-09-16\'::date;"
return sequelize.query(query, {transaction: t}).spread(function (results,metadata) {
console.log("Cursor created!")
});
}).then(function (result) {
console.log(result)
console.log("Transaction commited")
sequelize.query("FETCH NEXT FROM my_cur").spread(function (results,metadata) {
console.log("Fetching from previously created cursor:")
console.log(results)
console.log(metadata)
}).catch(function(err){
console.log("Failed to fetch from cursor")
console.log(err)
});
}).catch(function (err) {
throw err
console.log("Failed to create a cursor")
});
Wenn ich versuche, aus dem Cursor in einer anderen Sitzung zu holen erhalte ich:
FETCH NEXT FROM my_cur;
ERROR: <<my_cur>> doesn't exist.
Cursoren auch wenn WITH HOLD deklariert zerstört werden, nachdem eine Sitzung geschlossen und nicht zwischen den Sitzungen, meine Frage geteilt ist, wie Sequelize behandelt Sitzungen mit PostgreSQL, werde ich in der Lage sein, von diesem Cursor auf einem separaten API-Aufruf?
socket.on("fetch_next_page", function()){
var cursor = socket.session.cursor
var pageSize = 10
sequelize.query("FETCH +"pageSize"+ FROM my_cur").spread(function (results,metadata) {
console.log("Fetching from previously created cursor:")
console.log(results)
socket.emit("page",results)
console.log(metadata)
}).catch(function(err){
console.log("Failed to fetch from cursor")
console.log(err)
});
}
Da Sie nur eine gemeinsame Sitzung für die oben genannten Abfragen benötigen, können Sie stattdessen [pg-promise] (https://github.com/vitaly-t/pg-promise) verwenden. Es führt problemlos Einzelverbindungsabfragen aus, siehe [Aufgaben] (https://github.com/vitaly-t/pg-promise/wiki/Learn-by-Example#tasks) und [Transaktionen] (https: // github. com/vitaly-t/pg-promise/wiki/Lernen-durch-Beispiel # Transaktionen). –
Leider habe ich davon erfahren, nachdem ich das Bounty gemacht und eine (erfolgreiche) Implementierung mit https://github.com/brianc/node-postgres gemacht habe, bitte posten Sie Ihren Kommentar als Antwort, damit Sie das Bounty beanspruchen können, bevor es abläuft. –