=== Applying patches on top of PostgreSQL commit ID 8a1a1d6ab86217020a612ee2e03eae4fe00ae781 === /etc/rc.d/jail: WARNING: Per-jail configuration via jail_* variables is obsolete. Please consider migrating to /etc/jail.conf. Thu Mar 26 19:07:24 UTC 2026 On branch cf/5614 nothing to commit, working tree clean === using 'git am' to apply patch ./v3-0001-Add-metadata-non-leaf-index-block-statistics-to-p.patch === Applying: Add metadata (non-leaf) index block statistics to pg_stat functions and system views. Using index info to reconstruct a base tree... M doc/src/sgml/monitoring.sgml M src/backend/access/brin/brin.c M src/backend/access/brin/brin_revmap.c M src/backend/access/gin/ginbtree.c M src/backend/access/gin/ginfast.c M src/backend/access/gin/ginget.c M src/backend/access/gin/ginutil.c M src/backend/access/gist/gist.c M src/backend/access/gist/gistbuild.c M src/backend/access/gist/gistget.c M src/backend/access/hash/hashpage.c M src/backend/access/nbtree/nbtinsert.c M src/backend/access/nbtree/nbtpage.c M src/backend/access/nbtree/nbtsearch.c M src/backend/access/nbtree/nbtutils.c M src/backend/access/spgist/spgdoinsert.c M src/backend/access/spgist/spgscan.c M src/backend/access/spgist/spgutils.c M src/backend/catalog/system_views.sql M src/backend/utils/activity/pgstat_database.c M src/backend/utils/activity/pgstat_relation.c M src/backend/utils/adt/pgstatfuncs.c M src/include/catalog/pg_proc.dat M src/include/pgstat.h M src/test/regress/expected/rules.out M src/test/regress/expected/stats.out M src/test/regress/sql/stats.sql Falling back to patching base and 3-way merge... Auto-merging src/test/regress/sql/stats.sql CONFLICT (content): Merge conflict in src/test/regress/sql/stats.sql Auto-merging src/test/regress/expected/stats.out CONFLICT (content): Merge conflict in src/test/regress/expected/stats.out Auto-merging src/test/regress/expected/rules.out Auto-merging src/include/pgstat.h Auto-merging src/include/catalog/pg_proc.dat Auto-merging src/backend/utils/adt/pgstatfuncs.c Auto-merging src/backend/utils/activity/pgstat_relation.c Auto-merging src/backend/utils/activity/pgstat_database.c Auto-merging src/backend/catalog/system_views.sql Auto-merging src/backend/access/spgist/spgutils.c Auto-merging src/backend/access/spgist/spgscan.c Auto-merging src/backend/access/spgist/spgdoinsert.c Auto-merging src/backend/access/nbtree/nbtutils.c CONFLICT (content): Merge conflict in src/backend/access/nbtree/nbtutils.c Auto-merging src/backend/access/nbtree/nbtsearch.c Auto-merging src/backend/access/nbtree/nbtpage.c Auto-merging src/backend/access/nbtree/nbtinsert.c Auto-merging src/backend/access/hash/hashpage.c Auto-merging src/backend/access/gist/gistget.c Auto-merging src/backend/access/gist/gistbuild.c Auto-merging src/backend/access/gist/gist.c Auto-merging src/backend/access/gin/ginutil.c Auto-merging src/backend/access/gin/ginget.c Auto-merging src/backend/access/gin/ginfast.c Auto-merging src/backend/access/gin/ginbtree.c Auto-merging src/backend/access/brin/brin_revmap.c Auto-merging src/backend/access/brin/brin.c Auto-merging doc/src/sgml/monitoring.sgml error: Failed to merge in the changes. hint: Use 'git am --show-current-patch=diff' to see the failed patch Patch failed at 0001 Add metadata (non-leaf) index block statistics to pg_stat functions and system views. When you have resolved this problem, run "git am --continue". If you prefer to skip this patch, run "git am --skip" instead. To restore the original branch and stop patching, run "git am --abort". === using patch(1) to apply patch ./v3-0001-Add-metadata-non-leaf-index-block-statistics-to-p.patch === patching file doc/src/sgml/monitoring.sgml Hunk #1 succeeded at 3789 (offset 322 lines). Hunk #2 succeeded at 4791 (offset 331 lines). Hunk #3 succeeded at 4945 (offset 331 lines). patching file src/backend/access/brin/brin.c Hunk #1 succeeded at 1657 (offset 5 lines). patching file src/backend/access/brin/brin_revmap.c patching file src/backend/access/gin/ginbtree.c patching file src/backend/access/gin/ginfast.c patching file src/backend/access/gin/ginget.c patching file src/backend/access/gin/ginutil.c Hunk #2 succeeded at 597 (offset -36 lines). Hunk #3 succeeded at 625 (offset -36 lines). patching file src/backend/access/gist/gist.c Hunk #2 succeeded at 698 (offset 1 line). Hunk #3 succeeded at 1124 (offset 1 line). patching file src/backend/access/gist/gistbuild.c patching file src/backend/access/gist/gistget.c Hunk #1 succeeded at 355 (offset 9 lines). patching file src/backend/access/hash/hashpage.c patching file src/backend/access/nbtree/nbtinsert.c Hunk #2 succeeded at 1283 (offset 21 lines). Hunk #3 succeeded at 2289 (offset 24 lines). Hunk #4 succeeded at 2300 (offset 24 lines). Hunk #5 succeeded at 2370 (offset 25 lines). Hunk #6 succeeded at 2528 (offset 42 lines). patching file src/backend/access/nbtree/nbtpage.c Hunk #2 succeeded at 192 (offset 1 line). Hunk #3 succeeded at 258 (offset 2 lines). Hunk #4 succeeded at 381 (offset 4 lines). Hunk #5 succeeded at 408 (offset 4 lines). Hunk #6 succeeded at 546 (offset 5 lines). Hunk #7 succeeded at 611 (offset 5 lines). Hunk #8 succeeded at 651 (offset 5 lines). Hunk #9 succeeded at 694 (offset 5 lines). Hunk #10 succeeded at 759 (offset 5 lines). Hunk #11 succeeded at 2400 (offset 18 lines). Hunk #12 succeeded at 2596 (offset 18 lines). patching file src/backend/access/nbtree/nbtsearch.c Hunk #1 succeeded at 182 with fuzz 2 (offset -3 lines). Hunk #2 succeeded at 303 (offset -4 lines). Hunk #3 succeeded at 313 (offset -4 lines). Hunk #4 succeeded at 1995 (offset -520 lines). Hunk #5 succeeded at 2023 (offset -520 lines). Hunk #6 succeeded at 2034 (offset -520 lines). Hunk #7 succeeded at 2053 (offset -520 lines). Hunk #8 succeeded at 2143 (offset -520 lines). Hunk #9 succeeded at 2170 (offset -517 lines). patching file src/backend/access/nbtree/nbtutils.c Hunk #1 FAILED at 22. 1 out of 1 hunk FAILED -- saving rejects to file src/backend/access/nbtree/nbtutils.c.rej patching file src/backend/access/spgist/spgdoinsert.c Hunk #2 succeeded at 2156 (offset -1 lines). patching file src/backend/access/spgist/spgscan.c Hunk #1 succeeded at 892 (offset -5 lines). patching file src/backend/access/spgist/spgutils.c Hunk #2 succeeded at 273 (offset 1 line). Hunk #3 succeeded at 457 (offset -1 lines). Hunk #4 succeeded at 652 (offset -1 lines). patching file src/backend/catalog/system_views.sql Hunk #1 succeeded at 805 (offset 20 lines). Hunk #2 succeeded at 820 (offset 20 lines). Hunk #3 succeeded at 881 (offset 20 lines). Hunk #4 succeeded at 1145 (offset 47 lines). patching file src/backend/utils/activity/pgstat_database.c Hunk #1 succeeded at 453 (offset 10 lines). patching file src/backend/utils/activity/pgstat_relation.c Hunk #1 succeeded at 879 (offset -1 lines). Hunk #2 succeeded at 897 (offset -1 lines). patching file src/backend/utils/adt/pgstatfuncs.c Hunk #1 succeeded at 69 (offset 2 lines). Hunk #2 succeeded at 1073 (offset 15 lines). patching file src/include/catalog/pg_proc.dat Hunk #1 succeeded at 5619 (offset 23 lines). Hunk #2 succeeded at 5843 (offset 31 lines). patching file src/include/pgstat.h Hunk #1 succeeded at 160 (offset 4 lines). Hunk #2 succeeded at 372 (offset 22 lines). Hunk #3 succeeded at 472 (offset 24 lines). Hunk #4 succeeded at 757 (offset 33 lines). patching file src/test/regress/expected/rules.out Hunk #1 succeeded at 1885 (offset 3 lines). Hunk #2 succeeded at 2448 (offset 58 lines). Hunk #3 succeeded at 2471 (offset 59 lines). Hunk #4 succeeded at 2481 (offset 59 lines). Hunk #5 succeeded at 2497 (offset 59 lines). Hunk #6 succeeded at 2516 (offset 60 lines). Hunk #7 succeeded at 2531 (offset 60 lines). Hunk #8 succeeded at 2550 (offset 61 lines). patching file src/test/regress/expected/stats.out Hunk #1 FAILED at 1910. 1 out of 1 hunk FAILED -- saving rejects to file src/test/regress/expected/stats.out.rej patching file src/test/regress/sql/stats.sql Hunk #1 succeeded at 1000 with fuzz 2 (offset 56 lines). Unstaged changes after reset: M doc/src/sgml/monitoring.sgml M src/backend/access/brin/brin.c M src/backend/access/brin/brin_revmap.c M src/backend/access/gin/ginbtree.c M src/backend/access/gin/ginfast.c M src/backend/access/gin/ginget.c M src/backend/access/gin/ginutil.c M src/backend/access/gist/gist.c M src/backend/access/gist/gistbuild.c M src/backend/access/gist/gistget.c M src/backend/access/hash/hashpage.c M src/backend/access/nbtree/nbtinsert.c M src/backend/access/nbtree/nbtpage.c M src/backend/access/nbtree/nbtsearch.c M src/backend/access/spgist/spgdoinsert.c M src/backend/access/spgist/spgscan.c M src/backend/access/spgist/spgutils.c M src/backend/catalog/system_views.sql M src/backend/utils/activity/pgstat_database.c M src/backend/utils/activity/pgstat_relation.c M src/backend/utils/adt/pgstatfuncs.c M src/include/catalog/pg_proc.dat M src/include/pgstat.h M src/test/regress/expected/rules.out M src/test/regress/sql/stats.sql Removing src/backend/access/nbtree/nbtutils.c.rej Removing src/test/regress/expected/stats.out.rej === using 'git apply' to apply patch ./v3-0001-Add-metadata-non-leaf-index-block-statistics-to-p.patch === Applied patch to 'doc/src/sgml/monitoring.sgml' cleanly. Applied patch to 'src/backend/access/brin/brin.c' cleanly. Applied patch to 'src/backend/access/brin/brin_revmap.c' cleanly. Applied patch to 'src/backend/access/gin/ginbtree.c' cleanly. Applied patch to 'src/backend/access/gin/ginfast.c' cleanly. Applied patch to 'src/backend/access/gin/ginget.c' cleanly. Applied patch to 'src/backend/access/gin/ginutil.c' cleanly. Applied patch to 'src/backend/access/gist/gist.c' cleanly. Applied patch to 'src/backend/access/gist/gistbuild.c' cleanly. Applied patch to 'src/backend/access/gist/gistget.c' cleanly. Applied patch to 'src/backend/access/hash/hashpage.c' cleanly. Applied patch to 'src/backend/access/nbtree/nbtinsert.c' cleanly. Applied patch to 'src/backend/access/nbtree/nbtpage.c' cleanly. Applied patch to 'src/backend/access/nbtree/nbtsearch.c' cleanly. Applied patch to 'src/backend/access/nbtree/nbtutils.c' with conflicts. Applied patch to 'src/backend/access/spgist/spgdoinsert.c' cleanly. Applied patch to 'src/backend/access/spgist/spgscan.c' cleanly. Applied patch to 'src/backend/access/spgist/spgutils.c' cleanly. Applied patch to 'src/backend/catalog/system_views.sql' cleanly. Applied patch to 'src/backend/utils/activity/pgstat_database.c' cleanly. Applied patch to 'src/backend/utils/activity/pgstat_relation.c' cleanly. Applied patch to 'src/backend/utils/adt/pgstatfuncs.c' cleanly. Applied patch to 'src/include/catalog/pg_proc.dat' cleanly. Applied patch to 'src/include/pgstat.h' cleanly. Applied patch to 'src/test/regress/expected/rules.out' cleanly. Applied patch to 'src/test/regress/expected/stats.out' with conflicts. Applied patch to 'src/test/regress/sql/stats.sql' with conflicts. U src/backend/access/nbtree/nbtutils.c U src/test/regress/expected/stats.out U src/test/regress/sql/stats.sql diff --cc src/backend/access/nbtree/nbtutils.c index 732bc750c9e,912edf03dda..00000000000 --- a/src/backend/access/nbtree/nbtutils.c +++ b/src/backend/access/nbtree/nbtutils.c @@@ -21,10 -21,8 +21,14 @@@ #include "access/reloptions.h" #include "access/relscan.h" #include "commands/progress.h" +#include "common/int.h" +#include "lib/qunique.h" #include "miscadmin.h" ++<<<<<<< ours +#include "storage/lwlock.h" ++======= + #include "pgstat.h" ++>>>>>>> theirs #include "utils/datum.h" #include "utils/lsyscache.h" #include "utils/rel.h" diff --cc src/test/regress/expected/stats.out index ea7f7846895,c78ea27c04d..00000000000 --- a/src/test/regress/expected/stats.out +++ b/src/test/regress/expected/stats.out @@@ -1958,52 -1910,31 +1958,79 @@@ SELECT * FROM check_estimated_rows('SEL (1 row) DROP TABLE table_fillfactor; ++<<<<<<< ours +-- Test fastpath_exceeded stat +CREATE TABLE part_test (id int) PARTITION BY RANGE (id); +SELECT pg_stat_reset_shared('lock'); + pg_stat_reset_shared +---------------------- + +(1 row) + +-- Create partitions (exceeds number of slots) +DO $$ +DECLARE + max_locks int; +BEGIN + SELECT setting::int INTO max_locks + FROM pg_settings + WHERE name = 'max_locks_per_transaction'; + + FOR i IN 1..(max_locks + 10) LOOP + EXECUTE format( + 'CREATE TABLE part_test_%s PARTITION OF part_test + FOR VALUES FROM (%s) TO (%s)', + i, (i-1)*1000, i*1000 + ); + END LOOP; +END; +$$; +SELECT fastpath_exceeded AS fastpath_exceeded_before FROM pg_stat_lock WHERE locktype = 'relation' \gset +-- Needs a lock on each partition +SELECT count(*) FROM part_test; + count +------- + 0 +(1 row) + +-- Ensure pending stats are flushed ++======= + -- b-tree indexes: test stats collection for metadata index blocks + select count(*) from tenk2 where unique1 = '1504'; + count + ------- + 1 + (1 row) + + -- ensure pending stats are flushed ++>>>>>>> theirs SELECT pg_stat_force_next_flush(); pg_stat_force_next_flush -------------------------- (1 row) ++<<<<<<< ours +SELECT fastpath_exceeded > :fastpath_exceeded_before FROM pg_stat_lock WHERE locktype = 'relation'; + ?column? +---------- + t +(1 row) + +DROP TABLE part_test; ++======= + -- check effects + BEGIN; + SET LOCAL stats_fetch_consistency = snapshot; + SELECT idx_metadata_blks < idx_blks_hit + idx_blks_read, + idx_metadata_blks > 0 + FROM pg_statio_all_indexes + WHERE indexrelname='tenk2_unique1'; + ?column? | ?column? + ----------+---------- + t | t + (1 row) + + COMMIT; ++>>>>>>> theirs -- End of Stats Test diff --cc src/test/regress/sql/stats.sql index 65d8968c83e,3c61cab7ccc..00000000000 --- a/src/test/regress/sql/stats.sql +++ b/src/test/regress/sql/stats.sql @@@ -964,40 -944,21 +964,59 @@@ SELECT * FROM check_estimated_rows('SEL DROP TABLE table_fillfactor; ++<<<<<<< ours +-- Test fastpath_exceeded stat +CREATE TABLE part_test (id int) PARTITION BY RANGE (id); + +SELECT pg_stat_reset_shared('lock'); + +-- Create partitions (exceeds number of slots) +DO $$ +DECLARE + max_locks int; +BEGIN + SELECT setting::int INTO max_locks + FROM pg_settings + WHERE name = 'max_locks_per_transaction'; + + FOR i IN 1..(max_locks + 10) LOOP + EXECUTE format( + 'CREATE TABLE part_test_%s PARTITION OF part_test + FOR VALUES FROM (%s) TO (%s)', + i, (i-1)*1000, i*1000 + ); + END LOOP; +END; +$$; + +SELECT fastpath_exceeded AS fastpath_exceeded_before FROM pg_stat_lock WHERE locktype = 'relation' \gset + +-- Needs a lock on each partition +SELECT count(*) FROM part_test; + +-- Ensure pending stats are flushed +SELECT pg_stat_force_next_flush(); + +SELECT fastpath_exceeded > :fastpath_exceeded_before FROM pg_stat_lock WHERE locktype = 'relation'; + +DROP TABLE part_test; ++======= + -- b-tree indexes: test stats collection for metadata index blocks + select count(*) from tenk2 where unique1 = '1504'; + + -- ensure pending stats are flushed + SELECT pg_stat_force_next_flush(); + + -- check effects + BEGIN; + SET LOCAL stats_fetch_consistency = snapshot; + + SELECT idx_metadata_blks < idx_blks_hit + idx_blks_read, + idx_metadata_blks > 0 + FROM pg_statio_all_indexes + WHERE indexrelname='tenk2_unique1'; + + COMMIT; ++>>>>>>> theirs -- End of Stats Test