Re: pg_*_advice: tsv load failure, etc.

From: Dongpo Liu <poe(dot)liu(at)pm(dot)me>
To: Jakub Wartak <jakub(dot)wartak(at)enterprisedb(dot)com>
Cc: Robert Haas <robertmhaas(at)gmail(dot)com>, Noah Misch <noah(at)leadboat(dot)com>, pgsql-hackers(at)postgresql(dot)org
Subject: Re: pg_*_advice: tsv load failure, etc.
Date: 2026-10-04 12:38:43
Message-ID: isqFajcEK8dUy2os6OIjU9TV22xJeZWNaOkT-4jGGFv_9XMLZrfahedP5yGFX7LIHAKcDrz2Fmu_rgfB1CHTfuzgDt7JWmc6WA5WkCaeUJI=@pm.me
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

On Mon, Aug 31, 2026 Jakub Wartak wrote:
> Perhaps adding one statement to the docs would be good enough to cover
> it for now, like: "In order to change the already cached plans, issue
> ANALYZE on relevant tables."

Attached is a doc patch for item 5. I understand that Robert and Noah
agreed to leave the behavior as-is. This patch only documents it.

I did not use the ANALYZE wording, because ANALYZE does not reliably
invalidate cached plans. vac_update_relstats() writes the pg_class
tuple only if a value changed, so an ANALYZE that leaves the pg_class
statistics unchanged sends no relcache invalidation:

LOAD 'pg_plan_advice';
CREATE TABLE t (a int PRIMARY KEY);
INSERT INTO t SELECT generate_series(1, 10000);
VACUUM ANALYZE t;
SET plan_cache_mode = force_generic_plan;
PREPARE q AS SELECT * FROM t WHERE a = $1;
EXPLAIN (COSTS OFF) EXECUTE q(1); -- Index Only Scan
SET pg_plan_advice.advice = 'SEQ_SCAN(t)';
EXPLAIN (COSTS OFF) EXECUTE q(1); -- still Index Only Scan
ANALYZE t;
EXPLAIN (COSTS OFF) EXECUTE q(1); -- still Index Only Scan
INSERT INTO t SELECT generate_series(10001, 12000);
ANALYZE t;
EXPLAIN (COSTS OFF) EXECUTE q(1); -- Seq Scan

The same happens when another session changes an advice stash.

The patch adds a paragraph to the Limitations section of pg_plan_advice
and a short pointer in pg_stash_advice. It says that advice is consulted
only at plan time, mentions DISCARD PLANS for the current session, and
refers to PREPARE for when other sessions re-plan.

Best regards,
Dongpo Liu

On Sunday, October 4th, 2026 at 2:25 PM, Jakub Wartak <jakub(dot)wartak(at)enterprisedb(dot)com> wrote:

> On Fri, Aug 28, 2026 at 4:21 PM Robert Haas <robertmhaas(at)gmail(dot)com> wrote:
> >
> >
> > > ### 5. pg_plan_advice.advice / stash advice changes are silently ignored by an already-cached generic plan
> >
> > This is a planner control feature; it does not affect behavior other
> > than at plan time. I don't see that as a bug. That said, I think it
> > would be perfectly valid for someone to try to figure a way for advice
> > stash changes to invalidate plans, but I suspect that will require
> > significant new infrastructure. Plan invalidation is generally tied to
> > catalog modifications, and here we would instead want to tie it to a
> > plan ID. We could do that by adding a custom invalidation type to
> > sinval.h just for the use of pg_stash_advice, but would be a pretty
> > serious piece of core infrastructure for an as-yet-unproven contrib
> > module to use to solve a problem which (for all we know now) may have
> > little practical impact.
>
> FWIW, this was already discussed back in the day I think in [1]. I wouldn't
> remeber it otherwise if not the mailing list, but apparently ANALYZE on the
> table affected was enough to trigger the change [2]. Perhaps adding one
> statement to the docs would be good enough to cover it for now, like: "In
> order to change the already cached plans, issue ANALYZE on relevant tables."
> (because apparently without it it now confused 2 people and 1 AI ;))
>
> -J.
>
> [1] - https://www.postgresql.org/message-id/CA%2BTgmoYO0qtqz%2BV7S4q0e_dLhLrrsMxA51t5wks_y8Skv6cdRQ%40mail.gmail.com
> [2] - https://www.postgresql.org/message-id/CA%2BTgmob8O4TbZVr2zoqm5m-Zp6fj-8iBh%3D0u-xfiy5Xr5MNFCQ%40mail.gmail.com
>
>
>
>
>

Attachment Content-Type Size
v1-0001-doc-Note-that-plan-advice-does-not-affect-cached-.patch application/octet-stream 2.6 KB

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Andrew Dunstan 2026-10-04 12:52:13 Re: meson: avoid PATH bloat from NLS .mo targets in tmp_install test setup
Previous Message Zhijie Hou 2026-10-04 12:25:48 Re: Publication DDL can race with a concurrent UPDATE