| ▲ | SigmundA an hour ago | ||||||||||||||||
Other databases cache plans and have for years because it's very useful, many (most?) apps run many of the same statement with differing parameters, its a big win. They do this without the client having to figure out the statement matching logic like your various PG Orms and connection poolers try and do. They also do things like auto parameterization if the statement doesn't have them and parameter sniffing to make multiple different plans based on different values where it makes sense. https://learn.microsoft.com/en-us/sql/relational-databases/q... You can also get this, add HINTs to control this behavior if you don't like it or its causing a problem in production, crazy I know. https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-tr... PG is extremely primitive compared to these other systems in this area, and it has to be since it doesn't cache anything unless specifically instructed to for a single connection. | |||||||||||||||||
| ▲ | vladich an hour ago | parent [-] | ||||||||||||||||
You make some unsubstantiated claims here. I assure you that it isn't as simple as you claim. And what Postgres does here is (mostly) the right thing, you can't do much better. You simply can't decide what plan you need to use based on the query and its parameters alone, unless you already cached that plan for those parameters (and even in that case you need to watch out for possible dramatic changes in statistics). Prepared statements != cached execution plans. | |||||||||||||||||
| |||||||||||||||||