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

Reply via email to