私はpostgresqlでカーソルのページ設定を実装しようとしており、後にトランザクションでカーソルを作成してそこからデータを取得しようとしました。私は別のセッションでカーソルからフェッチしようとした場合SequelizeとWITH HOLDカーソル
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")
});
私が取得:
FETCH NEXT FROM my_cur;
ERROR: <<my_cur>> doesn't exist.
カーソルセッションが閉じた後に破壊されているWITH HOLDと宣言され、セッション間で共有されていない場合でも、私の質問をは、postgreSQLでセッションを処理する方法を後継していますが、別のAPI呼び出しでこのカーソルからFETCHできるようになりますか?
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)
});
}
あなたが必要とするすべては、上記のクエリのセットのための共有セッションですので、あなたの代わりに、そのために[PG-約束](https://github.com/vitaly-t/pg-promise)を使用することができます。単一接続クエリを簡単に実行します。[Tasks](https://github.com/vitaly-t/pg-promise/wiki/Learn-by-Example#tasks)および[Transactions](https:// github。 com/vitaly-t/pg-promise/wiki/Example-Learn#トランザクションを参照してください)。 –
悲しいことに、賞金を払ってこのことを知り、https://github.com/brianc/node-postgresを使って(成功した)実装を行いました。期限切れになる前に賞金を請求できるようにコメントとして投稿してください。 –