diff --git a/packages/pg-cursor/package.json b/packages/pg-cursor/package.json index 3d5dfaea2..07e3309c7 100644 --- a/packages/pg-cursor/package.json +++ b/packages/pg-cursor/package.json @@ -1,6 +1,6 @@ { "name": "pg-cursor", - "version": "2.13.0", + "version": "2.13.1", "description": "Query cursor extension for node-postgres", "main": "index.js", "directories": { @@ -18,7 +18,7 @@ "license": "MIT", "devDependencies": { "mocha": "^10.5.2", - "pg": "^8.14.0" + "pg": "^8.14.1" }, "peerDependencies": { "pg": "^8" diff --git a/packages/pg-query-stream/package.json b/packages/pg-query-stream/package.json index f08485dbd..8d7efe59c 100644 --- a/packages/pg-query-stream/package.json +++ b/packages/pg-query-stream/package.json @@ -1,6 +1,6 @@ { "name": "pg-query-stream", - "version": "4.8.0", + "version": "4.8.1", "description": "Postgres query result returned as readable stream", "main": "./dist/index.js", "types": "./dist/index.d.ts", @@ -37,7 +37,7 @@ "concat-stream": "~1.0.1", "eslint-plugin-promise": "^6.0.1", "mocha": "^10.5.2", - "pg": "^8.14.0", + "pg": "^8.14.1", "stream-spec": "~0.3.5", "ts-node": "^8.5.4", "typescript": "^4.0.3" @@ -46,6 +46,6 @@ "pg": "^8" }, "dependencies": { - "pg-cursor": "^2.13.0" + "pg-cursor": "^2.13.1" } } diff --git a/packages/pg/bench.js b/packages/pg/bench.js index 223b10278..8f966c581 100644 --- a/packages/pg/bench.js +++ b/packages/pg/bench.js @@ -47,21 +47,27 @@ const run = async () => { for (let i = 0; i < 4; i++) { let queries = await bench(client, params, seconds * 1000) console.log('') - console.log('little queries:', queries) + console.log('param queries:', queries) console.log('qps', queries / seconds) - console.log('on my laptop best so far seen 733 qps') + console.log('on my laptop best so far seen 987 qps') + + queries = await bench(client, { ...params, name: 'params' }, seconds * 1000) + console.log('') + console.log('named queries:', queries) + console.log('qps', queries / seconds) + console.log('on my laptop best so far seen 937 qps') console.log('') queries = await bench(client, seq, seconds * 1000) console.log('sequence queries:', queries) console.log('qps', queries / seconds) - console.log('on my laptop best so far seen 1309 qps') + console.log('on my laptop best so far seen 2725 qps') console.log('') queries = await bench(client, insert, seconds * 1000) console.log('insert queries:', queries) console.log('qps', queries / seconds) - console.log('on my laptop best so far seen 6445 qps') + console.log('on my laptop best so far seen 27383 qps') console.log('') console.log('Warming up bytea test') @@ -75,7 +81,7 @@ const run = async () => { const time = Date.now() - start console.log('bytea time:', time, 'ms') console.log('bytea length:', results.rows[0].data.byteLength, 'bytes') - console.log('on my laptop best so far seen 1107ms and 104857600 bytes') + console.log('on my laptop best so far seen 1407ms and 104857600 bytes') await new Promise((resolve) => setTimeout(resolve, 250)) } diff --git a/packages/pg/lib/query.js b/packages/pg/lib/query.js index fbef341bf..06b582f6f 100644 --- a/packages/pg/lib/query.js +++ b/packages/pg/lib/query.js @@ -161,7 +161,21 @@ class Query extends EventEmitter { return new Error('Query values must be an array') } if (this.requiresPreparation()) { - this.prepare(connection) + // If we're using the extended query protocol we fire off several separate commands + // to the backend. On some versions of node & some operating system versions + // the network stack writes each message separately instead of buffering them together + // causing the client & network to send more slowly. Corking & uncorking the stream + // allows node to buffer up the messages internally before sending them all off at once. + // note: we're checking for existence of cork/uncork because some versions of streams + // might not have this (cloudflare?) + connection.stream.cork && connection.stream.cork() + try { + this.prepare(connection) + } finally { + // while unlikely for this.prepare to throw, if it does & we don't uncork this stream + // this client becomes unresponsive, so put in finally block "just in case" + connection.stream.uncork && connection.stream.uncork() + } } else { connection.query(this.text) } diff --git a/packages/pg/package.json b/packages/pg/package.json index bf5b99a9d..48d1b55f8 100644 --- a/packages/pg/package.json +++ b/packages/pg/package.json @@ -1,6 +1,6 @@ { "name": "pg", - "version": "8.14.0", + "version": "8.14.1", "description": "PostgreSQL client - pure javascript & libpq with the same API", "keywords": [ "database",
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: