Skip to content

fix(pg): settle query_timeout once via handleError and clear timer - #3815

Open
mikemasam wants to merge 4 commits into
brianc:masterfrom
mikemasam:fix/emit-error-with-timeout
Open

mikemasam wants to merge 4 commits into
brianc:masterfrom
mikemasam:fix/emit-error-with-timeout

Conversation

@mikemasam

Copy link
Copy Markdown

Problem
With query_timeout = 100:

// *** callback API — called twice
client.query('SELECT pg_sleep(5)', (err) => {
  console.log(err.message) // 'Query read timeout' x2
})

//*** event API — never called
client.query('SELECT pg_sleep(5)')
  .on('error', (e) => console.log(e.message)) // never fires

Caused by this in client.js:

queryCallback(error)       // direct call
query.handleError(error)   // second call

query.callback = wrapper   // event query now looks like
                           // a callback query, so emit is skipped

Fix

  • Timeout settles once through handleError, which picks callback or emit.
  • Query emits a new internal cleanup event on success/error to clear the timer.
  • Callback is blanked after, so a late database answer is dropped.
// callback API — once
client.query('SELECT pg_sleep(5)', (err) => {
  console.log(err.message) // 'Query read timeout' x1
})

// event API — once
client.query('SELECT pg_sleep(5)')
  .on('error', (e) => console.log(e.message)) // 'Query read timeout' x1

@mikemasam
mikemasam marked this pull request as draft October 11, 2026 15:17
@mikemasam
mikemasam marked this pull request as ready for review October 11, 2026 15:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant