Hello Robert,
17.10.2026 00:44, Robert Haas wrote:
On Wed, Sep 23, 2026 at 1:17 PM Nikolay Samokhvalov<[email protected]> wrote:
AI found another case and prepared the attached patch. A single-target
PARTITIONWISE entry on a plain table disables every scan path,
although the advice only says that the table must not participate in a
partitionwise join.
Here's another set of patches, finally addressing this and your other
report, plus related problems that I found while digging around in
this area.
Could you please look at instability in 001_persist.pl found by natural
testing [1]:?
[10:27:25.048](0.445s) # die: error running SQL: 'psql:<stdin>:2: ERROR: stash modifications are not allowed because
"pg_stash_advice.tsv" has not been loaded yet'
# while running 'psql --no-psqlrc --no-align --tuples-only --quiet --dbname port=29827 host=/tmp/o4DZxN3eiX
dbname='postgres' --file - --variable ON_ERROR_STOP=1' with sql '
# SELECT pg_create_advice_stash('stash_a');
# SELECT pg_set_stashed_advice('stash_a', 1001, 'IndexScan(t)');
# SELECT pg_set_stashed_advice('stash_a', 1002,
E'line1\\nline2\\ttab\\\\backslash');
# SELECT pg_set_stashed_advice('stash_a', 1003, '');
# SELECT pg_create_advice_stash('stash_b');
# SELECT pg_set_stashed_advice('stash_b', 2001, 'SeqScan(t)');
# ' at
/home/bf/bf-build/culicidae/REL_19_STABLE/pgsql/contrib/pg_stash_advice/t/001_persist.pl
line 24.
The failure is pretty clear and can be easily reproduced with this sleep:
--- a/contrib/pg_stash_advice/stashpersist.c
+++ b/contrib/pg_stash_advice/stashpersist.c
@@ -146,2 +146,3 @@ pg_stash_advice_worker_main(Datum main_arg)
pgsa_read_from_disk();
+pg_usleep(random() % 200000);
pg_atomic_test_set_flag(&pgsa_state->stashes_ready);
It also makes the test fail other ways:
t/001_persist.pl .. 1/?
# Failed test 'stashes survived restart'
# at t/001_persist.pl line 44.
# got: ''
# expected: 'stash_a|2
# stash_b|1'
...
# Failed test 'entry contents survived restart with special characters intact'
# at t/001_persist.pl line 49.
# got: ''
# expected: 'stash_a|1001|IndexScan(t)
# stash_a|1002|line1
# line2 tab\backslash
# stash_b|2001|SeqScan(t)'
...
Probably, the fix can wait as it's the first failure of the test in 6
months.
[1]
https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=culicidae&dt=2026-10-19%2008%3A24%3A45
Best regards,
Alexander