On 2018-03-02 15:29:09 -0500, Bruce Momjian wrote:
> Postgres uses a conservative method for reusing plans with previous
> constants, as described in the PREPARE manual page:
>
> https://www.postgresql.org/docs/10/static/sql-prepare.html
> Prepared statements can use generic plans rather than re-planning with
> each set of supplied EXECUTE values. This occurs immediately for prepared
> statements with no parameters; otherwise it occurs only after five or more
> executions produce plans whose estimated cost average (including planning
> overhead) is more expensive than the generic plan cost estimate. Once
> a generic plan is chosen, it is used for the remaining lifetime of the
> prepared statement. Using EXECUTE values which are rare in columns with
> many duplicates can generate custom plans that are so much cheaper than
> the generic plan, even after adding planning overhead, that the generic
> plan might never be used.
>
> While I have heard people complain about how other databases cache
> prepare plans, I have heard few complaints about the Postgres approach,
> and I haven't even heard of people asking to control the documented "five
> or more" behavior.
This *constantly* is a problem.
Greetings,
Andres Freund