node-postgres/test/native/copyto-largedata-tests.js

24 lines
1.0 KiB
JavaScript

var helper = require(__dirname+"/../test-helper");
var Client = require(__dirname + "/../../lib/native");
test("COPY TO large amount of data from postgres", function () {
//there were a bug in native implementation of COPY TO:
//if there were too much data (if we face situation
//when data is not ready while calling PQgetCopyData);
//while loop in Connection::HandleIOEvent becomes infinite
//in such way hanging node, consumes 100% cpu, and making connection unusable
var con = new Client(helper.config),
rowCount = 100000,
stdoutStream = con.copyTo('COPY (select generate_series(1, ' + rowCount + ')) TO STDOUT');
stdoutStream.on('data', function () {
rowCount--;
});
stdoutStream.on('end', function () {
assert.equal(rowCount, 0, "copy to should load exactly requested number of rows");
con.query("SELECT 1", assert.calls(function (error, result) {
assert.ok(!error && result, "loading large amount of data by copy to should not break connection");
con.end();
}));
});
con.connect();
});