On Fri, Dec 5, 2025 at 8:57 PM Robert Haas <[email protected]> wrote: [..] > 014f9a831a320666bf2195949f41710f970c54ad removes the need for what was > previously 0004, so here is a new patch series with that dropped, to > avoid confusing cfbot or human reviewers.
Quick-question regarding cross-interactions of the extensions: would it be possible for auto_explain to have something like auto_explain.log_custom_options='PLAN_ADVICES' so that it could be dumping the advice of the queries involved . I can see there is ApplyExtensionExplainOption() and that would have to probably be used by auto_explain(?) Or is there any other better way or perhaps it somehow is against some design or it's just outside of initial scope? This would solve two problems: a) sometimes explaining manually (psql) is simply not realistic as it is being run by app only b) auto_explain could log nested queries and could print plan advices along the way, which can be very painful process otherwise (reverse-engineering how the optimizer would name things in more complex queries run from inside PLPGSQL functions) BTW, some feedback: the plan advices (plan fixing) seems to work fine for nested queries inside PLPGSQL, and also I've discovered (?) that one can do even today with patchset the following: alter function blah(bigint) set pg_plan_advice.advice = 'NESTED_LOOP_MATERIALIZE(b)'; which seems to be pretty cool, because it allows more targeted fixes without even having capability of fixing plans for specific query_id (as discussed earlier). For the generation part, the only remaining thing is how it integrates with partitions (especially the ones being dynamically created/dropped over time). Right now one needs to keep the advice(s) in sync after altering the partitions, but it could be expected that some form of regexp/partition-templating would be built into pg_plan_advices instead. Anyway, I think this one should go into documentation just as known-limitations for now. While scratching my head on how to prove that this is not crashing I've also checked below ones (TLDR all ok): 1. PG_TEST_INITDB_EXTRA_OPTS="-c shared_preload_libraries='pg_plan_advice'" meson test # It was clean 2. PG_TEST_INITDB_EXTRA_OPTS="-c shared_preload_libraries='pg_plan_advice'" PGOPTIONS="-c pg_plan_advice.advice=NESTED_LOOP_MATERIALIZE(certainlynotused)" meson test # This had several failures, but all is OK: it's just some of them had to additional (expected) text inside regression.diffs: NESTED_LOOP_MATERIALIZE(certainlynotused) /* not matched */ 3. PG_TEST_INITDB_EXTRA_OPTS="-c shared_preload_libraries='pg_plan_advice' -c pg_plan_advice.shared_collection_limit=42" meson test # It was clean too -J.
