Comments (6)
We have both bursty and continuous clients so having an idle timeout is a default which feels the most responsible to me.
Cheap query every 10 seconds from even 1000 clients is pale in comparison to an actual workload! Thank you for your help!
from node-postgres.
Hmm...I'm not entirely clear on what you're looking for, but I'll do my best to give you some more information. You want a flag or something to check on the pool to see if the pool is able to connect to the DB? One way would be to manually instantiate and connect a client outside of the pool in some sort of startup section...wait for that client to connect, then disconnect it. Then you know the pool should be able to connect (provided you use the same connection info & the db doesn't go down between when the check connection was made & the pool was first asked to connect!). Otherwise you could do something like
async function onProcessStartup() {
const pool = new Pool()
await pool.query('SELECT 1;')
}
The startup handshake with postgres of creating a connection can take 10 to 100 times longer than executing a query on an already connected client, depending on your environment.
from node-postgres.
Thanks, that's useful. In the meantime we have actually gone with the select 1;
approach.
What I was looking to find out is if pool.totalCount > 0
is an accurate indication that the pool is successfully connected to the DB, assuming that the DB will close connections if it is unhealthy.
from node-postgres.
Yeah pool.totalCount
will definitely tell you how many clients are in the pool (both active & idle). If postgres becomes unavailable you're correct all the clients will be closed & removed from the pool immediately after they receive an error from their connection (either a network OR postgres error) while they're idle in the pool! You can still run into instances where your pool is fully drained (due to idleTimeoutMillis
) & so it will be empty but your application might still be considered healthy.
from node-postgres.
You can still run into instances where your pool is fully drained (due to idleTimeoutMillis) & so it will be empty but your application might still be considered healthy.
Yes this has occurred to me!
So it seems their are two approaches:
- Periodically query the db with a cheap query
- Disable connection idle timeout and check connection count
Option 1 is probably the most robust while maintaining the ability to set pool sizes and idle timeouts as required for the client without flooding the DB with connections at scale.
from node-postgres.
Yeah definitely. 1 is probably the way to go. A cheap query is really cheap to execute both from postgres & node's perspective, so it should be minimal impact on the system.
You can technically let your connections never idle out...it doesn't hurt anything.... Having the idle timeout just kinda the "try turning it off and back on again" approach automatically built in, and since connections to postgres are a semi limited resource (unless you're running pg-bouncer or something) might as well not hog 'em if you're not usin' 'em. If your app stays under steady full load they will never timeout anyway.
from node-postgres.
Related Issues (20)
- [BUG] node-postgres query submit preparation takes a huge amount of time HOT 2
- Best SQL migration tool to be used along side `pg` HOT 1
- node-postgres 8.11.5 is not able to connect to AWS RDS Postgres 16.1 HOT 2
- Using pg-query-stream with query_timeout set, timeout timer doesn't get released HOT 1
- document how to run query and retrieve results HOT 8
- Passing in quoted tabled names for a create table query HOT 4
- SASL: Last message was not SASLResponse HOT 7
- Error: SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a string HOT 7
- SyntaxError: Cannot use import statement outside a module HOT 2
- I can't use parameters with more than a digit HOT 2
- bind message supplies 1 parameters, but prepared statement "" requires 8 HOT 2
- Inserting now() at time zone 'utc' gives invalid results HOT 4
- Errors with Vite+Vue / Nuxt+Vue HOT 4
- How to avoid serialization when using setTypeParser? HOT 4
- Procedure names being converted HOT 1
- [Question] How to print parameterize query? HOT 1
- error: relation "users" does not exist HOT 5
- [question] How to prevent database disconnects from crashing Node.js? HOT 1
- Timezone not set on pool event 'connect' HOT 2
- Fails creating pg client on FIPS environment HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from node-postgres.