=== Applying patches on top of PostgreSQL commit ID c5d34f4a550f26583a0b92e294eff7d001e318d3 === /etc/rc.d/jail: WARNING: Per-jail configuration via jail_* variables is obsolete. Please consider migrating to /etc/jail.conf. Sat Nov 8 02:42:20 UTC 2025 On branch cf/6122 nothing to commit, working tree clean === using 'git am' to apply patch ./v1-0001-PATCH-V1-Improve-TAP-test-uses-of-Test-More-funct.patch === Applying: Improve TAP test uses of Test::More functions Using index info to reconstruct a base tree... M contrib/amcheck/t/004_verify_nbtree_unique.pl M contrib/pg_visibility/t/002_corrupt_vm.pl M src/bin/initdb/t/001_initdb.pl M src/bin/pg_basebackup/t/040_pg_createsubscriber.pl M src/bin/pg_combinebackup/t/010_hardlink.pl M src/bin/pg_dump/t/002_pg_dump.pl M src/bin/pg_dump/t/005_pg_dump_filterfile.pl M src/bin/pgbench/t/001_pgbench_with_server.pl M src/bin/psql/t/001_basic.pl M src/bin/scripts/t/020_createdb.pl M src/interfaces/libpq/t/003_load_balance_host_list.pl M src/interfaces/libpq/t/004_load_balance_dns.pl M src/test/modules/test_aio/t/002_io_workers.pl M src/test/modules/test_misc/t/001_constraint_validation.pl M src/test/modules/test_misc/t/002_tablespace.pl M src/test/modules/test_pg_dump/t/001_base.pl M src/test/modules/xid_wraparound/t/002_limits.pl M src/test/recovery/t/001_stream_rep.pl M src/test/recovery/t/003_recovery_targets.pl M src/test/recovery/t/005_replay_delay.pl M src/test/recovery/t/006_logical_decoding.pl M src/test/recovery/t/020_archive_status.pl M src/test/recovery/t/024_archive_recovery.pl M src/test/recovery/t/035_standby_logical_decoding.pl M src/test/recovery/t/040_standby_failover_slots_sync.pl M src/test/recovery/t/042_low_level_backup.pl M src/test/recovery/t/044_invalidate_inactive_slots.pl M src/test/ssl/t/001_ssltests.pl M src/test/subscription/t/001_rep_changes.pl M src/test/subscription/t/007_ddl.pl M src/test/subscription/t/013_partition.pl M src/test/subscription/t/027_nosuperuser.pl M src/test/subscription/t/031_column_list.pl M src/test/subscription/t/035_conflicts.pl Falling back to patching base and 3-way merge... Auto-merging src/test/subscription/t/035_conflicts.pl CONFLICT (content): Merge conflict in src/test/subscription/t/035_conflicts.pl Auto-merging src/test/subscription/t/031_column_list.pl CONFLICT (content): Merge conflict in src/test/subscription/t/031_column_list.pl Auto-merging src/test/subscription/t/027_nosuperuser.pl CONFLICT (content): Merge conflict in src/test/subscription/t/027_nosuperuser.pl Auto-merging src/test/subscription/t/013_partition.pl CONFLICT (content): Merge conflict in src/test/subscription/t/013_partition.pl Auto-merging src/test/subscription/t/007_ddl.pl CONFLICT (content): Merge conflict in src/test/subscription/t/007_ddl.pl Auto-merging src/test/subscription/t/001_rep_changes.pl CONFLICT (content): Merge conflict in src/test/subscription/t/001_rep_changes.pl Auto-merging src/test/ssl/t/001_ssltests.pl Auto-merging src/test/recovery/t/044_invalidate_inactive_slots.pl CONFLICT (content): Merge conflict in src/test/recovery/t/044_invalidate_inactive_slots.pl Auto-merging src/test/recovery/t/042_low_level_backup.pl CONFLICT (content): Merge conflict in src/test/recovery/t/042_low_level_backup.pl Auto-merging src/test/recovery/t/040_standby_failover_slots_sync.pl CONFLICT (content): Merge conflict in src/test/recovery/t/040_standby_failover_slots_sync.pl Auto-merging src/test/recovery/t/035_standby_logical_decoding.pl CONFLICT (content): Merge conflict in src/test/recovery/t/035_standby_logical_decoding.pl Auto-merging src/test/recovery/t/024_archive_recovery.pl CONFLICT (content): Merge conflict in src/test/recovery/t/024_archive_recovery.pl Auto-merging src/test/recovery/t/020_archive_status.pl CONFLICT (content): Merge conflict in src/test/recovery/t/020_archive_status.pl Auto-merging src/test/recovery/t/006_logical_decoding.pl CONFLICT (content): Merge conflict in src/test/recovery/t/006_logical_decoding.pl Auto-merging src/test/recovery/t/005_replay_delay.pl CONFLICT (content): Merge conflict in src/test/recovery/t/005_replay_delay.pl Auto-merging src/test/recovery/t/003_recovery_targets.pl CONFLICT (content): Merge conflict in src/test/recovery/t/003_recovery_targets.pl Auto-merging src/test/modules/test_pg_dump/t/001_base.pl CONFLICT (content): Merge conflict in src/test/modules/test_pg_dump/t/001_base.pl Auto-merging src/test/modules/test_misc/t/001_constraint_validation.pl CONFLICT (content): Merge conflict in src/test/modules/test_misc/t/001_constraint_validation.pl Auto-merging src/test/modules/test_aio/t/002_io_workers.pl CONFLICT (content): Merge conflict in src/test/modules/test_aio/t/002_io_workers.pl Auto-merging src/interfaces/libpq/t/004_load_balance_dns.pl CONFLICT (content): Merge conflict in src/interfaces/libpq/t/004_load_balance_dns.pl Auto-merging src/interfaces/libpq/t/003_load_balance_host_list.pl CONFLICT (content): Merge conflict in src/interfaces/libpq/t/003_load_balance_host_list.pl Auto-merging src/bin/psql/t/001_basic.pl Auto-merging src/bin/pgbench/t/001_pgbench_with_server.pl CONFLICT (content): Merge conflict in src/bin/pgbench/t/001_pgbench_with_server.pl Auto-merging src/bin/pg_dump/t/005_pg_dump_filterfile.pl CONFLICT (content): Merge conflict in src/bin/pg_dump/t/005_pg_dump_filterfile.pl Auto-merging src/bin/pg_dump/t/002_pg_dump.pl CONFLICT (content): Merge conflict in src/bin/pg_dump/t/002_pg_dump.pl Auto-merging src/bin/pg_basebackup/t/040_pg_createsubscriber.pl CONFLICT (content): Merge conflict in src/bin/pg_basebackup/t/040_pg_createsubscriber.pl Auto-merging contrib/amcheck/t/004_verify_nbtree_unique.pl CONFLICT (content): Merge conflict in contrib/amcheck/t/004_verify_nbtree_unique.pl error: Failed to merge in the changes. hint: Use 'git am --show-current-patch=diff' to see the failed patch Patch failed at 0001 Improve TAP test uses of Test::More functions 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". Unstaged changes after reset: M contrib/amcheck/t/004_verify_nbtree_unique.pl M src/bin/pg_basebackup/t/010_pg_basebackup.pl M src/bin/pg_basebackup/t/040_pg_createsubscriber.pl M src/bin/pg_dump/t/002_pg_dump.pl M src/bin/pg_dump/t/005_pg_dump_filterfile.pl M src/bin/pgbench/t/001_pgbench_with_server.pl M src/bin/psql/t/001_basic.pl M src/interfaces/libpq/t/003_load_balance_host_list.pl M src/interfaces/libpq/t/004_load_balance_dns.pl M src/test/modules/test_aio/t/002_io_workers.pl M src/test/modules/test_json_parser/t/004_test_parser_perf.pl M src/test/modules/test_misc/t/001_constraint_validation.pl M src/test/modules/test_pg_dump/t/001_base.pl M src/test/recovery/t/003_recovery_targets.pl M src/test/recovery/t/005_replay_delay.pl M src/test/recovery/t/006_logical_decoding.pl M src/test/recovery/t/020_archive_status.pl M src/test/recovery/t/024_archive_recovery.pl M src/test/recovery/t/035_standby_logical_decoding.pl M src/test/recovery/t/040_standby_failover_slots_sync.pl M src/test/recovery/t/042_low_level_backup.pl M src/test/recovery/t/044_invalidate_inactive_slots.pl M src/test/ssl/t/001_ssltests.pl M src/test/subscription/t/001_rep_changes.pl M src/test/subscription/t/007_ddl.pl M src/test/subscription/t/013_partition.pl M src/test/subscription/t/027_nosuperuser.pl M src/test/subscription/t/031_column_list.pl M src/test/subscription/t/035_conflicts.pl === using patch(1) to apply patch ./v1-0001-PATCH-V1-Improve-TAP-test-uses-of-Test-More-funct.patch === patching file contrib/amcheck/t/004_verify_nbtree_unique.pl Hunk #1 FAILED at 159. Hunk #2 FAILED at 177. Hunk #3 FAILED at 191. Hunk #4 FAILED at 208. Hunk #5 FAILED at 237. 5 out of 5 hunks FAILED -- saving rejects to file contrib/amcheck/t/004_verify_nbtree_unique.pl.rej patching file contrib/pg_visibility/t/002_corrupt_vm.pl Hunk #1 FAILED at 40. 1 out of 1 hunk FAILED -- saving rejects to file contrib/pg_visibility/t/002_corrupt_vm.pl.rej patching file src/bin/initdb/t/001_initdb.pl Hunk #1 FAILED at 308. 1 out of 1 hunk FAILED -- saving rejects to file src/bin/initdb/t/001_initdb.pl.rej patching file src/bin/pg_basebackup/t/010_pg_basebackup.pl patching file src/bin/pg_basebackup/t/040_pg_createsubscriber.pl Hunk #1 FAILED at 341. Hunk #2 FAILED at 535. 2 out of 2 hunks FAILED -- saving rejects to file src/bin/pg_basebackup/t/040_pg_createsubscriber.pl.rej patching file src/bin/pg_combinebackup/t/010_hardlink.pl Hunk #1 FAILED at 144. 1 out of 1 hunk FAILED -- saving rejects to file src/bin/pg_combinebackup/t/010_hardlink.pl.rej patching file src/bin/pg_dump/t/002_pg_dump.pl Hunk #1 FAILED at 5477. 1 out of 1 hunk FAILED -- saving rejects to file src/bin/pg_dump/t/002_pg_dump.pl.rej patching file src/bin/pg_dump/t/005_pg_dump_filterfile.pl Hunk #1 FAILED at 100. Hunk #2 FAILED at 130. Hunk #3 FAILED at 159. Hunk #4 FAILED at 181. Hunk #5 FAILED at 205. Hunk #6 FAILED at 230. Hunk #7 FAILED at 251. Hunk #8 FAILED at 272. Hunk #9 FAILED at 298. Hunk #10 FAILED at 321. Hunk #11 FAILED at 341. Hunk #12 FAILED at 380. Hunk #13 FAILED at 497. Hunk #14 FAILED at 537. Hunk #15 FAILED at 632. Hunk #16 FAILED at 727. Hunk #17 FAILED at 751. Hunk #18 FAILED at 775. Hunk #19 FAILED at 798. Hunk #20 FAILED at 821. Hunk #21 FAILED at 849. Hunk #22 FAILED at 869. Hunk #23 FAILED at 890. 23 out of 23 hunks FAILED -- saving rejects to file src/bin/pg_dump/t/005_pg_dump_filterfile.pl.rej patching file src/bin/pgbench/t/001_pgbench_with_server.pl Hunk #1 FAILED at 753. Hunk #2 FAILED at 1521. Hunk #3 FAILED at 1532. 3 out of 3 hunks FAILED -- saving rejects to file src/bin/pgbench/t/001_pgbench_with_server.pl.rej patching file src/bin/psql/t/001_basic.pl Hunk #2 FAILED at 141. 1 out of 2 hunks FAILED -- saving rejects to file src/bin/psql/t/001_basic.pl.rej patching file src/bin/scripts/t/020_createdb.pl Hunk #1 FAILED at 351. 1 out of 1 hunk FAILED -- saving rejects to file src/bin/scripts/t/020_createdb.pl.rej patching file src/interfaces/libpq/t/003_load_balance_host_list.pl Hunk #1 FAILED at 61. 1 out of 1 hunk FAILED -- saving rejects to file src/interfaces/libpq/t/003_load_balance_host_list.pl.rej patching file src/interfaces/libpq/t/004_load_balance_dns.pl Hunk #1 FAILED at 111. 1 out of 1 hunk FAILED -- saving rejects to file src/interfaces/libpq/t/004_load_balance_dns.pl.rej patching file src/test/modules/test_aio/t/002_io_workers.pl Hunk #1 FAILED at 67. 1 out of 1 hunk FAILED -- saving rejects to file src/test/modules/test_aio/t/002_io_workers.pl.rej patching file src/test/modules/test_json_parser/t/004_test_parser_perf.pl patching file src/test/modules/test_misc/t/001_constraint_validation.pl Hunk #1 FAILED at 58. Hunk #2 FAILED at 70. Hunk #3 FAILED at 86. Hunk #4 FAILED at 119. Hunk #5 FAILED at 131. Hunk #6 FAILED at 153. Hunk #7 FAILED at 171. Hunk #8 FAILED at 190. Hunk #9 FAILED at 219. Hunk #10 FAILED at 245. Hunk #11 FAILED at 259. Hunk #12 FAILED at 278. Hunk #13 FAILED at 298. 13 out of 13 hunks FAILED -- saving rejects to file src/test/modules/test_misc/t/001_constraint_validation.pl.rej patching file src/test/modules/test_misc/t/002_tablespace.pl Hunk #1 FAILED at 29. 1 out of 1 hunk FAILED -- saving rejects to file src/test/modules/test_misc/t/002_tablespace.pl.rej patching file src/test/modules/test_pg_dump/t/001_base.pl Hunk #1 FAILED at 981. Hunk #2 FAILED at 989. 2 out of 2 hunks FAILED -- saving rejects to file src/test/modules/test_pg_dump/t/001_base.pl.rej patching file src/test/modules/xid_wraparound/t/002_limits.pl Hunk #1 FAILED at 90. 1 out of 1 hunk FAILED -- saving rejects to file src/test/modules/xid_wraparound/t/002_limits.pl.rej patching file src/test/recovery/t/001_stream_rep.pl Hunk #1 FAILED at 265. Hunk #2 FAILED at 293. Hunk #3 FAILED at 312. Hunk #4 FAILED at 325. Hunk #5 FAILED at 577. 5 out of 5 hunks FAILED -- saving rejects to file src/test/recovery/t/001_stream_rep.pl.rej patching file src/test/recovery/t/003_recovery_targets.pl Hunk #1 FAILED at 155. Hunk #2 FAILED at 183. 2 out of 2 hunks FAILED -- saving rejects to file src/test/recovery/t/003_recovery_targets.pl.rej patching file src/test/recovery/t/005_replay_delay.pl Hunk #1 FAILED at 53. 1 out of 1 hunk FAILED -- saving rejects to file src/test/recovery/t/005_replay_delay.pl.rej patching file src/test/recovery/t/006_logical_decoding.pl Hunk #1 FAILED at 35. Hunk #2 FAILED at 54. Hunk #3 FAILED at 201. 3 out of 3 hunks FAILED -- saving rejects to file src/test/recovery/t/006_logical_decoding.pl.rej patching file src/test/recovery/t/020_archive_status.pl Hunk #1 FAILED at 245. 1 out of 1 hunk FAILED -- saving rejects to file src/test/recovery/t/020_archive_status.pl.rej patching file src/test/recovery/t/024_archive_recovery.pl Hunk #1 FAILED at 91. 1 out of 1 hunk FAILED -- saving rejects to file src/test/recovery/t/024_archive_recovery.pl.rej patching file src/test/recovery/t/035_standby_logical_decoding.pl Hunk #1 FAILED at 394. Hunk #2 FAILED at 487. Hunk #3 FAILED at 620. 3 out of 3 hunks FAILED -- saving rejects to file src/test/recovery/t/035_standby_logical_decoding.pl.rej patching file src/test/recovery/t/040_standby_failover_slots_sync.pl Hunk #1 FAILED at 100. Hunk #2 FAILED at 110. Hunk #3 FAILED at 313. Hunk #4 FAILED at 341. Hunk #5 FAILED at 379. 5 out of 5 hunks FAILED -- saving rejects to file src/test/recovery/t/040_standby_failover_slots_sync.pl.rej patching file src/test/recovery/t/042_low_level_backup.pl Hunk #1 FAILED at 105. Hunk #2 FAILED at 134. 2 out of 2 hunks FAILED -- saving rejects to file src/test/recovery/t/042_low_level_backup.pl.rej patching file src/test/recovery/t/044_invalidate_inactive_slots.pl Hunk #1 FAILED at 94. 1 out of 1 hunk FAILED -- saving rejects to file src/test/recovery/t/044_invalidate_inactive_slots.pl.rej patching file src/test/ssl/t/001_ssltests.pl patching file src/test/subscription/t/001_rep_changes.pl Hunk #1 FAILED at 364. Hunk #2 FAILED at 515. Hunk #3 FAILED at 588. 3 out of 3 hunks FAILED -- saving rejects to file src/test/subscription/t/001_rep_changes.pl.rej patching file src/test/subscription/t/007_ddl.pl Hunk #1 FAILED at 45. Hunk #2 FAILED at 56. 2 out of 2 hunks FAILED -- saving rejects to file src/test/subscription/t/007_ddl.pl.rej patching file src/test/subscription/t/013_partition.pl Hunk #1 FAILED at 367. Hunk #2 FAILED at 780. Hunk #3 FAILED at 801. 3 out of 3 hunks FAILED -- saving rejects to file src/test/subscription/t/013_partition.pl.rej patching file src/test/subscription/t/027_nosuperuser.pl Hunk #1 FAILED at 399. 1 out of 1 hunk FAILED -- saving rejects to file src/test/subscription/t/027_nosuperuser.pl.rej patching file src/test/subscription/t/031_column_list.pl Hunk #1 FAILED at 1272. 1 out of 1 hunk FAILED -- saving rejects to file src/test/subscription/t/031_column_list.pl.rej patching file src/test/subscription/t/035_conflicts.pl Hunk #1 FAILED at 224. Hunk #2 FAILED at 239. Hunk #3 FAILED at 262. Hunk #4 FAILED at 302. Hunk #5 FAILED at 324. Hunk #6 FAILED at 347. Hunk #7 FAILED at 380. Hunk #8 FAILED at 511. Hunk #9 FAILED at 536. Hunk #10 FAILED at 559. 10 out of 10 hunks FAILED -- saving rejects to file src/test/subscription/t/035_conflicts.pl.rej Unstaged changes after reset: M src/bin/pg_basebackup/t/010_pg_basebackup.pl M src/bin/psql/t/001_basic.pl M src/test/modules/test_json_parser/t/004_test_parser_perf.pl M src/test/ssl/t/001_ssltests.pl Removing contrib/amcheck/t/004_verify_nbtree_unique.pl.rej Removing contrib/pg_visibility/t/002_corrupt_vm.pl.rej Removing src/bin/initdb/t/001_initdb.pl.rej Removing src/bin/pg_basebackup/t/040_pg_createsubscriber.pl.rej Removing src/bin/pg_combinebackup/t/010_hardlink.pl.rej Removing src/bin/pg_dump/t/002_pg_dump.pl.rej Removing src/bin/pg_dump/t/005_pg_dump_filterfile.pl.rej Removing src/bin/pgbench/t/001_pgbench_with_server.pl.rej Removing src/bin/psql/t/001_basic.pl.rej Removing src/bin/scripts/t/020_createdb.pl.rej Removing src/interfaces/libpq/t/003_load_balance_host_list.pl.rej Removing src/interfaces/libpq/t/004_load_balance_dns.pl.rej Removing src/test/modules/test_aio/t/002_io_workers.pl.rej Removing src/test/modules/test_misc/t/001_constraint_validation.pl.rej Removing src/test/modules/test_misc/t/002_tablespace.pl.rej Removing src/test/modules/test_pg_dump/t/001_base.pl.rej Removing src/test/modules/xid_wraparound/t/002_limits.pl.rej Removing src/test/recovery/t/001_stream_rep.pl.rej Removing src/test/recovery/t/003_recovery_targets.pl.rej Removing src/test/recovery/t/005_replay_delay.pl.rej Removing src/test/recovery/t/006_logical_decoding.pl.rej Removing src/test/recovery/t/020_archive_status.pl.rej Removing src/test/recovery/t/024_archive_recovery.pl.rej Removing src/test/recovery/t/035_standby_logical_decoding.pl.rej Removing src/test/recovery/t/040_standby_failover_slots_sync.pl.rej Removing src/test/recovery/t/042_low_level_backup.pl.rej Removing src/test/recovery/t/044_invalidate_inactive_slots.pl.rej Removing src/test/subscription/t/001_rep_changes.pl.rej Removing src/test/subscription/t/007_ddl.pl.rej Removing src/test/subscription/t/013_partition.pl.rej Removing src/test/subscription/t/027_nosuperuser.pl.rej Removing src/test/subscription/t/031_column_list.pl.rej Removing src/test/subscription/t/035_conflicts.pl.rej === using 'git apply' to apply patch ./v1-0001-PATCH-V1-Improve-TAP-test-uses-of-Test-More-funct.patch === Applied patch to 'contrib/amcheck/t/004_verify_nbtree_unique.pl' with conflicts. Applied patch to 'contrib/pg_visibility/t/002_corrupt_vm.pl' cleanly. Applied patch to 'src/bin/initdb/t/001_initdb.pl' cleanly. Applied patch to 'src/bin/pg_basebackup/t/010_pg_basebackup.pl' cleanly. Applied patch to 'src/bin/pg_basebackup/t/040_pg_createsubscriber.pl' with conflicts. Applied patch to 'src/bin/pg_combinebackup/t/010_hardlink.pl' cleanly. Applied patch to 'src/bin/pg_dump/t/002_pg_dump.pl' with conflicts. Applied patch to 'src/bin/pg_dump/t/005_pg_dump_filterfile.pl' with conflicts. Applied patch to 'src/bin/pgbench/t/001_pgbench_with_server.pl' with conflicts. Applied patch to 'src/bin/psql/t/001_basic.pl' cleanly. Applied patch to 'src/bin/scripts/t/020_createdb.pl' cleanly. Applied patch to 'src/interfaces/libpq/t/003_load_balance_host_list.pl' with conflicts. Applied patch to 'src/interfaces/libpq/t/004_load_balance_dns.pl' with conflicts. Applied patch to 'src/test/modules/test_aio/t/002_io_workers.pl' with conflicts. Applied patch to 'src/test/modules/test_json_parser/t/004_test_parser_perf.pl' cleanly. Applied patch to 'src/test/modules/test_misc/t/001_constraint_validation.pl' with conflicts. Applied patch to 'src/test/modules/test_misc/t/002_tablespace.pl' cleanly. Applied patch to 'src/test/modules/test_pg_dump/t/001_base.pl' with conflicts. Applied patch to 'src/test/modules/xid_wraparound/t/002_limits.pl' cleanly. Applied patch to 'src/test/recovery/t/001_stream_rep.pl' cleanly. Applied patch to 'src/test/recovery/t/003_recovery_targets.pl' with conflicts. Applied patch to 'src/test/recovery/t/005_replay_delay.pl' with conflicts. Applied patch to 'src/test/recovery/t/006_logical_decoding.pl' with conflicts. Applied patch to 'src/test/recovery/t/020_archive_status.pl' with conflicts. Applied patch to 'src/test/recovery/t/024_archive_recovery.pl' with conflicts. Applied patch to 'src/test/recovery/t/035_standby_logical_decoding.pl' with conflicts. Applied patch to 'src/test/recovery/t/040_standby_failover_slots_sync.pl' with conflicts. Applied patch to 'src/test/recovery/t/042_low_level_backup.pl' with conflicts. Applied patch to 'src/test/recovery/t/044_invalidate_inactive_slots.pl' with conflicts. Applied patch to 'src/test/ssl/t/001_ssltests.pl' cleanly. Applied patch to 'src/test/subscription/t/001_rep_changes.pl' with conflicts. Applied patch to 'src/test/subscription/t/007_ddl.pl' with conflicts. Applied patch to 'src/test/subscription/t/013_partition.pl' with conflicts. Applied patch to 'src/test/subscription/t/027_nosuperuser.pl' with conflicts. Applied patch to 'src/test/subscription/t/031_column_list.pl' with conflicts. Applied patch to 'src/test/subscription/t/035_conflicts.pl' with conflicts. U contrib/amcheck/t/004_verify_nbtree_unique.pl U src/bin/pg_basebackup/t/040_pg_createsubscriber.pl U src/bin/pg_dump/t/002_pg_dump.pl U src/bin/pg_dump/t/005_pg_dump_filterfile.pl U src/bin/pgbench/t/001_pgbench_with_server.pl U src/interfaces/libpq/t/003_load_balance_host_list.pl U src/interfaces/libpq/t/004_load_balance_dns.pl U src/test/modules/test_aio/t/002_io_workers.pl U src/test/modules/test_misc/t/001_constraint_validation.pl U src/test/modules/test_pg_dump/t/001_base.pl U src/test/recovery/t/003_recovery_targets.pl U src/test/recovery/t/005_replay_delay.pl U src/test/recovery/t/006_logical_decoding.pl U src/test/recovery/t/020_archive_status.pl U src/test/recovery/t/024_archive_recovery.pl U src/test/recovery/t/035_standby_logical_decoding.pl U src/test/recovery/t/040_standby_failover_slots_sync.pl U src/test/recovery/t/042_low_level_backup.pl U src/test/recovery/t/044_invalidate_inactive_slots.pl U src/test/subscription/t/001_rep_changes.pl U src/test/subscription/t/007_ddl.pl U src/test/subscription/t/013_partition.pl U src/test/subscription/t/027_nosuperuser.pl U src/test/subscription/t/031_column_list.pl U src/test/subscription/t/035_conflicts.pl diff --cc contrib/amcheck/t/004_verify_nbtree_unique.pl index 2cd23fc20ed,d2cc81aac6a..00000000000 --- a/contrib/amcheck/t/004_verify_nbtree_unique.pl +++ b/contrib/amcheck/t/004_verify_nbtree_unique.pl @@@ -159,8 -159,7 +159,12 @@@ $node->safe_psql 'postgres', q( SELECT bt_index_check('bttest_unique_idx1', true, true); )); ++<<<<<<< ours +like( + $stderr, ++======= + like($stderr, ++>>>>>>> theirs qr/index uniqueness is violated for index "bttest_unique_idx1"/, 'detected uniqueness violation for index "bttest_unique_idx1"'); @@@ -179,8 -178,7 +183,12 @@@ 'postgres', q( SELECT bt_index_check('bttest_unique_idx2', true, true); )); ++<<<<<<< ours +like( + $stderr, ++======= + like($stderr, ++>>>>>>> theirs qr/item order invariant violated for index "bttest_unique_idx2"/, 'detected item order invariant violation for index "bttest_unique_idx2"'); @@@ -195,8 -193,7 +203,12 @@@ $node->safe_psql 'postgres', q( SELECT bt_index_check('bttest_unique_idx2', true, true); )); ++<<<<<<< ours +like( + $stderr, ++======= + like($stderr, ++>>>>>>> theirs qr/index uniqueness is violated for index "bttest_unique_idx2"/, 'detected uniqueness violation for index "bttest_unique_idx2"'); @@@ -214,8 -211,7 +226,12 @@@ 'postgres', q( SELECT bt_index_check('bttest_unique_idx3', true, true); )); ++<<<<<<< ours +like( + $stderr, ++======= + like($stderr, ++>>>>>>> theirs qr/item order invariant violated for index "bttest_unique_idx3"/, 'detected item order invariant violation for index "bttest_unique_idx3"'); @@@ -245,8 -241,7 +261,12 @@@ $node->safe_psql 'postgres', q( SELECT bt_index_check('bttest_unique_idx3', true, true); )); ++<<<<<<< ours +like( + $stderr, ++======= + like($stderr, ++>>>>>>> theirs qr/index uniqueness is violated for index "bttest_unique_idx3"/, 'detected uniqueness violation for index "bttest_unique_idx3"'); diff --cc src/bin/pg_basebackup/t/040_pg_createsubscriber.pl index 3d6086dc489,bf963e54412..00000000000 --- a/src/bin/pg_basebackup/t/040_pg_createsubscriber.pl +++ b/src/bin/pg_basebackup/t/040_pg_createsubscriber.pl @@@ -341,8 -341,9 +341,14 @@@ $node_p->safe_psql $node_p->wait_for_replay_catchup($node_s); ++<<<<<<< ours +is($node_s->safe_psql($db1, "SELECT COUNT(*) FROM pg_publication"), + '2', 'two pre-existing publications on subscriber'); ++======= + is($node_s->safe_psql($db1, "SELECT COUNT(*) = 2 FROM pg_publication"), + 't', + 'two pre-existing publications on subscriber'); ++>>>>>>> theirs $node_s->stop; diff --cc src/bin/pg_dump/t/002_pg_dump.pl index 445a541abf6,21a2d1e5fe1..00000000000 --- a/src/bin/pg_dump/t/002_pg_dump.pl +++ b/src/bin/pg_dump/t/002_pg_dump.pl @@@ -5193,17 -5477,15 +5193,26 @@@ foreach my $run (sort keys %pgdump_runs if (($tests{$test}->{like}->{$test_key} || $tests{$test}->{all_runs}) && !defined($tests{$test}->{unlike}->{$test_key})) { ++<<<<<<< ours + if (!like( + $output_file, $tests{$test}->{regexp}, + "$run: should dump $test")) ++======= + if (!like($output_file, $tests{$test}->{regexp}, + "$run: should dump $test")) ++>>>>>>> theirs { diag("Review $run results in $tempdir"); } } else { ++<<<<<<< ours + if (!unlike( + $output_file, $tests{$test}->{regexp}, ++======= + if (!unlike($output_file, $tests{$test}->{regexp}, ++>>>>>>> theirs "$run: should not dump $test")) { diag("Review $run results in $tempdir"); diff --cc src/bin/pg_dump/t/005_pg_dump_filterfile.pl index 7a47ad17da9,5e48fa58d60..00000000000 --- a/src/bin/pg_dump/t/005_pg_dump_filterfile.pl +++ b/src/bin/pg_dump/t/005_pg_dump_filterfile.pl @@@ -103,9 -103,7 +103,13 @@@ my $dump = slurp_file($plainfile) like($dump, qr/^CREATE TABLE public\.table_one/m, "table one dumped"); like($dump, qr/^CREATE TABLE public\.table_two/m, "table two dumped"); like($dump, qr/^CREATE TABLE public\.table_three/m, "table three dumped"); ++<<<<<<< ours +like( + $dump, + qr/^CREATE TABLE public\.table_three_one/m, ++======= + like($dump, qr/^CREATE TABLE public\.table_three_one/m, ++>>>>>>> theirs "table three one dumped"); # Test various combinations of whitespace, comments and correct filters @@@ -134,17 -132,10 +138,24 @@@ $dump = slurp_file($plainfile) like($dump, qr/^CREATE TABLE public\.table_one/m, "dumped table one"); like($dump, qr/^CREATE TABLE public\.table_two/m, "dumped table two"); ++<<<<<<< ours +unlike( + $dump, + qr/^CREATE TABLE public\.table_three/m, + "table three not dumped"); +unlike( + $dump, + qr/^CREATE TABLE public\.table_three_one/m, + "table three_one not dumped"); +unlike( + $dump, + qr/^COPY public\.table_one/m, ++======= + unlike($dump, qr/^CREATE TABLE public\.table_three/m, "table three not dumped"); + unlike($dump, qr/^CREATE TABLE public\.table_three_one/m, + "table three_one not dumped"); + unlike($dump, qr/^COPY public\.table_one/m, ++>>>>>>> theirs "content of table one is not included"); like($dump, qr/^COPY public\.table_two/m, "content of table two is included"); @@@ -193,9 -184,7 +204,13 @@@ $dump = slurp_file($plainfile) unlike($dump, qr/^CREATE TABLE public\.table_one/m, "table one not dumped"); like($dump, qr/^CREATE TABLE public\.table_two/m, "dumped table two"); like($dump, qr/^CREATE TABLE public\.table_three/m, "dumped table three"); ++<<<<<<< ours +like( + $dump, + qr/^CREATE TABLE public\.table_three_one/m, ++======= + like($dump, qr/^CREATE TABLE public\.table_three_one/m, ++>>>>>>> theirs "dumped table three_one"); # Test dumping tables with a wildcard pattern @@@ -219,9 -208,7 +234,13 @@@ $dump = slurp_file($plainfile) unlike($dump, qr/^CREATE TABLE public\.table_one/m, "table one not dumped"); unlike($dump, qr/^CREATE TABLE public\.table_two/m, "table two not dumped"); like($dump, qr/^CREATE TABLE public\.table_three/m, "dumped table three"); ++<<<<<<< ours +like( + $dump, + qr/^CREATE TABLE public\.table_three_one/m, ++======= + like($dump, qr/^CREATE TABLE public\.table_three_one/m, ++>>>>>>> theirs "dumped table three_one"); # Test dumping table with multiline quoted tablename @@@ -243,9 -230,7 +262,13 @@@ command_ok $dump = slurp_file($plainfile); ++<<<<<<< ours +like( + $dump, + qr/^CREATE TABLE public.\"strange aaa/m, ++======= + like($dump, qr/^CREATE TABLE public.\"strange aaa/m, ++>>>>>>> theirs "dump table with new line in name"); # Test excluding multiline quoted tablename from dump @@@ -266,9 -251,7 +289,13 @@@ command_ok $dump = slurp_file($plainfile); ++<<<<<<< ours +unlike( + $dump, + qr/^CREATE TABLE public.\"strange aaa/m, ++======= + unlike($dump, qr/^CREATE TABLE public.\"strange aaa/m, ++>>>>>>> theirs "dump table with new line in name"); # Test excluding an entire schema @@@ -338,9 -321,7 +365,13 @@@ command_ok $dump = slurp_file($plainfile); ++<<<<<<< ours +like( + $dump, + qr/^CREATE TABLE public.\"\nt\nt\n\" \($/ms, ++======= + like($dump, qr/^CREATE TABLE public.\"\nt\nt\n\" \($/ms, ++>>>>>>> theirs "dump table with multiline strange name"); open $inputfile, '>', "$tempdir/inputfile.txt" @@@ -360,9 -341,7 +391,13 @@@ command_ok $dump = slurp_file($plainfile); ++<<<<<<< ours +like( + $dump, + qr/^CREATE TABLE public.\"\nt\nt\n\" \($/ms, ++======= + like($dump, qr/^CREATE TABLE public.\"\nt\nt\n\" \($/ms, ++>>>>>>> theirs "dump table with multiline strange name"); ######################################### @@@ -654,9 -633,7 +689,13 @@@ command_ok $dump = slurp_file($plainfile); like($dump, qr/^CREATE TABLE public\.table_two/m, "wanted table restored"); ++<<<<<<< ours +unlike( + $dump, + qr/^CREATE TABLE public\.table_one/m, ++======= + unlike($dump, qr/^CREATE TABLE public\.table_one/m, ++>>>>>>> theirs "unwanted table is not restored"); open $inputfile, '>', "$tempdir/inputfile.txt" @@@ -751,9 -728,7 +790,13 @@@ command_ok $dump = slurp_file($plainfile); like($dump, qr/^CREATE FUNCTION public\.foo1/m, "wanted function restored"); ++<<<<<<< ours +unlike( + $dump, + qr/^CREATE TABLE public\.foo2/m, ++======= + unlike($dump, qr/^CREATE TABLE public\.foo2/m, ++>>>>>>> theirs "unwanted function is not restored"); # this should be white space tolerant (against the -P argument) @@@ -824,9 -799,7 +867,13 @@@ command_ok $dump = slurp_file($plainfile); like($dump, qr/^CREATE TABLE s1\.t1/m, "wanted table from schema restored"); ++<<<<<<< ours +like( + $dump, + qr/^CREATE SEQUENCE s1\.s1/m, ++======= + like( $dump, qr/^CREATE SEQUENCE s1\.s1/m, ++>>>>>>> theirs "wanted sequence from schema restored"); unlike($dump, qr/^CREATE TABLE s2\t2/m, "unwanted table is not restored"); @@@ -848,13 -821,9 +895,19 @@@ command_ok $dump = slurp_file($plainfile); ++<<<<<<< ours +unlike( + $dump, + qr/^CREATE TABLE s1\.t1/m, + "unwanted table from schema is not restored"); +unlike( + $dump, + qr/^CREATE SEQUENCE s1\.s1/m, ++======= + unlike($dump, qr/^CREATE TABLE s1\.t1/m, + "unwanted table from schema is not restored"); + unlike($dump, qr/^CREATE SEQUENCE s1\.s1/m, ++>>>>>>> theirs "unwanted sequence from schema is not restored"); like($dump, qr/^CREATE TABLE s2\.t2/m, "wanted table restored"); like($dump, qr/^CREATE TABLE public\.t1/m, "wanted table restored"); @@@ -900,9 -869,7 +953,13 @@@ command_ok $dump = slurp_file($plainfile); ++<<<<<<< ours +unlike( + $dump, + qr/^CREATE TABLE public\.bootab/m, ++======= + unlike($dump, qr/^CREATE TABLE public\.bootab/m, ++>>>>>>> theirs "exclude dumped children table"); open $inputfile, '>', "$tempdir/inputfile.txt" diff --cc src/bin/pgbench/t/001_pgbench_with_server.pl index 581e9af7907,0e075bb40bf..00000000000 --- a/src/bin/pgbench/t/001_pgbench_with_server.pl +++ b/src/bin/pgbench/t/001_pgbench_with_server.pl @@@ -755,21 -755,13 +755,31 @@@ my ($ret, $out, $err) = $node->psql('po is($ret, 0, "psql seeded_random count ok"); is($err, '', "psql seeded_random count stderr is empty"); ++<<<<<<< ours +like( + $out, + qr/\b$seed\|uniform\|1\d\d\d\|2/, + "psql seeded_random count uniform"); +like( + $out, + qr/\b$seed\|exponential\|2\d\d\d\|2/, + "psql seeded_random count exponential"); +like( + $out, + qr/\b$seed\|gaussian\|3\d\d\d\|2/, + "psql seeded_random count gaussian"); +like( + $out, + qr/\b$seed\|zipfian\|4\d\d\d\|2/, ++======= + like($out, qr/\b$seed\|uniform\|1\d\d\d\|2/, + "psql seeded_random count uniform"); + like($out, qr/\b$seed\|exponential\|2\d\d\d\|2/, + "psql seeded_random count exponential"); + like($out, qr/\b$seed\|gaussian\|3\d\d\d\|2/, + "psql seeded_random count gaussian"); + like($out, qr/\b$seed\|zipfian\|4\d\d\d\|2/, ++>>>>>>> theirs "psql seeded_random count zipfian"); $node->safe_psql('postgres', 'DROP TABLE seeded_random;'); @@@ -1529,9 -1521,8 +1539,14 @@@ sub check_pgbench_log # $prefix is simple enough, thus does not need escaping my @logs = list_files($dir, qr{^$prefix\..*$}); ++<<<<<<< ours + is(scalar(@logs), $nb, "number of log files"); + is(scalar(grep(/\/$prefix\.\d+(\.\d+)?$/, @logs)), + $nb, "file name format"); ++======= + is(scalar @logs, $nb, "number of log files"); + is(scalar(grep(/\/$prefix\.\d+(\.\d+)?$/, @logs)), $nb, "file name format"); ++>>>>>>> theirs my $log_number = 0; for my $log (sort @logs) @@@ -1541,10 -1532,8 +1556,15 @@@ my @contents = split(/\n/, $contents_raw); my $clen = @contents; ++<<<<<<< ours + cmp_ok($clen, '>=', $min, + "transaction count for $log ($clen) is above min"); + cmp_ok($clen, '<=', $max, + "transaction count for $log ($clen) is below max"); ++======= + cmp_ok($clen, '>=', $min, "transaction count for $log ($clen) is above min"); + cmp_ok($clen, '<=', $max, "transaction count for $log ($clen) is below max"); ++>>>>>>> theirs my $clen_match = grep(/$re/, @contents); is($clen_match, $clen, "transaction format for $prefix"); diff --cc src/interfaces/libpq/t/003_load_balance_host_list.pl index 7a4c14ada98,a291588f34b..00000000000 --- a/src/interfaces/libpq/t/003_load_balance_host_list.pl +++ b/src/interfaces/libpq/t/003_load_balance_host_list.pl @@@ -61,12 -61,9 +61,18 @@@ my $node3_occurrences = () my $total_occurrences = $node1_occurrences + $node2_occurrences + $node3_occurrences; ++<<<<<<< ours +cmp_ok($node1_occurrences, '>', 1, + "received at least one connection on node1"); +cmp_ok($node2_occurrences, '>', 1, + "received at least one connection on node2"); +cmp_ok($node3_occurrences, '>', 1, + "received at least one connection on node3"); ++======= + cmp_ok($node1_occurrences, '>', 1, "received at least one connection on node1"); + cmp_ok($node2_occurrences, '>', 1, "received at least one connection on node2"); + cmp_ok($node3_occurrences, '>', 1, "received at least one connection on node3"); ++>>>>>>> theirs is($total_occurrences, 50, "received 50 connections across all nodes"); $node1->stop(); diff --cc src/interfaces/libpq/t/004_load_balance_dns.pl index 2b4bd261c3d,feb5e71b2c6..00000000000 --- a/src/interfaces/libpq/t/004_load_balance_dns.pl +++ b/src/interfaces/libpq/t/004_load_balance_dns.pl @@@ -111,12 -111,9 +111,18 @@@ my $node3_occurrences = () my $total_occurrences = $node1_occurrences + $node2_occurrences + $node3_occurrences; ++<<<<<<< ours +cmp_ok($node1_occurrences, '>', 1, + "received at least one connection on node1"); +cmp_ok($node2_occurrences, '>', 1, + "received at least one connection on node2"); +cmp_ok($node3_occurrences, '>', 1, + "received at least one connection on node3"); ++======= + cmp_ok($node1_occurrences, '>', 1, "received at least one connection on node1"); + cmp_ok($node2_occurrences, '>', 1, "received at least one connection on node2"); + cmp_ok($node3_occurrences, '>', 1, "received at least one connection on node3"); ++>>>>>>> theirs is($total_occurrences, 50, "received 50 connections across all nodes"); $node1->stop(); diff --cc src/test/modules/test_aio/t/002_io_workers.pl index 22914385df3,c8e919c62b3..00000000000 --- a/src/test/modules/test_aio/t/002_io_workers.pl +++ b/src/test/modules/test_aio/t/002_io_workers.pl @@@ -67,8 -67,7 +67,12 @@@ sub change_number_of_io_worker if ($expect_failure) { ++<<<<<<< ours + like( + $stderr, ++======= + like($stderr, ++>>>>>>> theirs qr/$worker_count is outside the valid range for parameter "io_workers"/, "updating number of io_workers to $worker_count failed, as expected" ); diff --cc src/test/modules/test_misc/t/001_constraint_validation.pl index bdc751724f4,2ffcb317a41..00000000000 --- a/src/test/modules/test_misc/t/001_constraint_validation.pl +++ b/src/test/modules/test_misc/t/001_constraint_validation.pl @@@ -58,9 -58,8 +58,14 @@@ run_sql_command # normal run will verify table data $output = run_sql_command('alter table atacc1 alter test_a set not null;'); ok(!is_table_verified($output), 'with constraint will not scan table'); ++<<<<<<< ours +like( + $output, + qr/existing constraints on column "atacc1.test_a" are sufficient to prove that it does not contain nulls/, ++======= + like($output, + qr/existing constraints on column "atacc1.test_a" are sufficient to prove that it does not contain nulls/, ++>>>>>>> theirs 'test_a proved by constraints'); run_sql_command('alter table atacc1 alter test_a drop not null;'); @@@ -71,8 -70,7 +76,12 @@@ $output = run_sql_command ); ok(is_table_verified($output), 'table was scanned'); # we may miss debug message for test_a constraint because we need verify table due test_b ++<<<<<<< ours +unlike( + $output, ++======= + unlike($output, ++>>>>>>> theirs qr/existing constraints on column "atacc1.test_b" are sufficient to prove that it does not contain nulls/, 'test_b not proved by wrong constraints'); run_sql_command( @@@ -87,12 -85,10 +96,19 @@@ $output = run_sql_command 'alter table atacc1 alter test_b set not null, alter test_a set not null;' ); ok(!is_table_verified($output), 'table was not scanned for both columns'); ++<<<<<<< ours +like( + $output, + qr/existing constraints on column "atacc1.test_a" are sufficient to prove that it does not contain nulls/, + 'test_a proved by constraints'); +like( + $output, ++======= + like($output, + qr/existing constraints on column "atacc1.test_a" are sufficient to prove that it does not contain nulls/, + 'test_a proved by constraints'); + like($output, ++>>>>>>> theirs qr/existing constraints on column "atacc1.test_b" are sufficient to prove that it does not contain nulls/, 'test_b proved by constraints'); run_sql_command('drop table atacc1;'); @@@ -122,8 -118,7 +138,12 @@@ $output = run_sql_command 'ALTER TABLE list_parted2 ATTACH PARTITION part_3_4 FOR VALUES IN (3, 4);' ); ok(!is_table_verified($output), 'table part_3_4 not scanned'); ++<<<<<<< ours +like( + $output, ++======= + like($output, ++>>>>>>> theirs qr/partition constraint for table "part_3_4" is implied by existing constraints/, 'part_3_4 verified by existing constraints'); @@@ -135,8 -130,7 +155,12 @@@ run_sql_command $output = run_sql_command( 'ALTER TABLE list_parted2 ATTACH PARTITION list_parted2_def default;'); ok(!is_table_verified($output), 'table list_parted2_def not scanned'); ++<<<<<<< ours +like( + $output, ++======= + like($output, ++>>>>>>> theirs qr/partition constraint for table "list_parted2_def" is implied by existing constraints/, 'list_parted2_def verified by existing constraints'); @@@ -144,8 -138,7 +168,12 @@@ $output = run_sql_command 'CREATE TABLE part_55_66 PARTITION OF list_parted2 FOR VALUES IN (55, 66);' ); ok(!is_table_verified($output), 'table list_parted2_def not scanned'); ++<<<<<<< ours +like( + $output, ++======= + like($output, ++>>>>>>> theirs qr/updated partition constraint for default partition "list_parted2_def" is implied by existing constraints/, 'updated partition constraint for default partition list_parted2_def'); @@@ -160,12 -153,9 +188,18 @@@ run_sql_command $output = run_sql_command( 'ALTER TABLE list_parted2 ATTACH PARTITION part_5 FOR VALUES IN (5);'); unlike($output, qr/verifying table "part_5"/, 'table part_5 not scanned'); ++<<<<<<< ours +like( + $output, + qr/verifying table "list_parted2_def"/, + 'list_parted2_def scanned'); +like( + $output, ++======= + like($output, qr/verifying table "list_parted2_def"/, + 'list_parted2_def scanned'); + like($output, ++>>>>>>> theirs qr/partition constraint for table "part_5" is implied by existing constraints/, 'part_5 verified by existing constraints'); @@@ -181,12 -171,9 +215,18 @@@ run_sql_command $output = run_sql_command( 'ALTER TABLE list_parted2 ATTACH PARTITION part_5 FOR VALUES IN (5);'); unlike($output, qr/verifying table "part_5"/, 'table part_5 not scanned'); ++<<<<<<< ours +like( + $output, + qr/verifying table "list_parted2_def"/, + 'list_parted2_def scanned'); +like( + $output, ++======= + like($output, qr/verifying table "list_parted2_def"/, + 'list_parted2_def scanned'); + like($output, ++>>>>>>> theirs qr/partition constraint for table "part_5" is implied by existing constraints/, 'part_5 verified by existing constraints'); @@@ -203,12 -190,9 +243,18 @@@ run_sql_command $output = run_sql_command( 'ALTER TABLE list_parted2 ATTACH PARTITION part_6 FOR VALUES IN (6);'); unlike($output, qr/verifying table "part_6"/, 'table part_6 not scanned'); ++<<<<<<< ours +like( + $output, + qr/verifying table "list_parted2_def"/, + 'list_parted2_def scanned'); +like( + $output, ++======= + like($output, qr/verifying table "list_parted2_def"/, + 'list_parted2_def scanned'); + like($output, ++>>>>>>> theirs qr/partition constraint for table "part_6" is implied by existing constraints/, 'part_6 verified by existing constraints'); @@@ -234,19 -218,16 +280,30 @@@ $output = run_sql_command 'ALTER TABLE part_7 ATTACH PARTITION part_7_a_null FOR VALUES IN (\'a\', null);' ); ok(!is_table_verified($output), 'table not scanned'); ++<<<<<<< ours +like( + $output, ++======= + like($output, ++>>>>>>> theirs qr/partition constraint for table "part_7_a_null" is implied by existing constraints/, 'part_7_a_null verified by existing constraints'); $output = run_sql_command( 'ALTER TABLE list_parted2 ATTACH PARTITION part_7 FOR VALUES IN (7);'); ok(!is_table_verified($output), 'tables not scanned'); ++<<<<<<< ours +like( + $output, + qr/partition constraint for table "part_7" is implied by existing constraints/, + 'part_7 verified by existing constraints'); +like( + $output, ++======= + like($output, + qr/partition constraint for table "part_7" is implied by existing constraints/, + 'part_7 verified by existing constraints'); + like($output, ++>>>>>>> theirs qr/updated partition constraint for default partition "list_parted2_def" is implied by existing constraints/, 'updated partition constraint for default partition list_parted2_def'); @@@ -263,10 -244,9 +320,16 @@@ $output = run_sql_command 'ALTER TABLE range_parted ATTACH PARTITION range_part1 FOR VALUES FROM (1, 1) TO (1, 10);' ); ok(is_table_verified($output), 'table range_part1 scanned'); ++<<<<<<< ours +unlike( + $output, + qr/partition constraint for table "range_part1" is implied by existing constraints/, + 'range_part1 not verified by existing constraints'); ++======= + unlike($output, + qr/partition constraint for table "range_part1" is implied by existing constraints/, + 'range_part1 not verified by existing constraints'); ++>>>>>>> theirs run_sql_command( 'CREATE TABLE range_part2 ( @@@ -277,8 -257,7 +340,12 @@@ $output = run_sql_command 'ALTER TABLE range_parted ATTACH PARTITION range_part2 FOR VALUES FROM (1, 10) TO (1, 20);' ); ok(!is_table_verified($output), 'table range_part2 not scanned'); ++<<<<<<< ours +like( + $output, ++======= + like($output, ++>>>>>>> theirs qr/partition constraint for table "range_part2" is implied by existing constraints/, 'range_part2 verified by existing constraints'); @@@ -297,21 -276,16 +364,33 @@@ run_sql_command $output = run_sql_command( 'ALTER TABLE quuux ATTACH PARTITION quuux1 FOR VALUES IN (1);'); ok(is_table_verified($output), 'quuux1 table scanned'); ++<<<<<<< ours +unlike( + $output, + qr/partition constraint for table "quuux1" is implied by existing constraints/, + 'quuux1 verified by existing constraints'); ++======= + unlike($output, + qr/partition constraint for table "quuux1" is implied by existing constraints/, + 'quuux1 verified by existing constraints'); ++>>>>>>> theirs run_sql_command('CREATE TABLE quuux2 (a int, b text);'); $output = run_sql_command( 'ALTER TABLE quuux ATTACH PARTITION quuux2 FOR VALUES IN (2);'); ++<<<<<<< ours +unlike( + $output, + qr/verifying table "quuux_default1"/, + 'quuux_default1 not scanned'); +like($output, qr/verifying table "quuux2"/, 'quuux2 scanned'); +like( + $output, ++======= + unlike($output, qr/verifying table "quuux_default1"/, 'quuux_default1 not scanned'); + like($output, qr/verifying table "quuux2"/, 'quuux2 scanned'); + like($output, ++>>>>>>> theirs qr/updated partition constraint for default partition "quuux_default1" is implied by existing constraints/, 'updated partition constraint for default partition quuux_default1'); run_sql_command('DROP TABLE quuux1, quuux2;'); @@@ -320,15 -294,13 +399,25 @@@ $output = run_sql_command( 'CREATE TABLE quuux1 PARTITION OF quuux FOR VALUES IN (1);'); ok(!is_table_verified($output), 'tables not scanned'); ++<<<<<<< ours +unlike( + $output, + qr/partition constraint for table "quuux1" is implied by existing constraints/, + 'quuux1 verified by existing constraints'); +$output = run_sql_command( + 'CREATE TABLE quuux2 PARTITION OF quuux FOR VALUES IN (2);'); +ok(!is_table_verified($output), 'tables not scanned'); +like( + $output, ++======= + unlike($output, + qr/partition constraint for table "quuux1" is implied by existing constraints/, + 'quuux1 verified by existing constraints'); + $output = run_sql_command( + 'CREATE TABLE quuux2 PARTITION OF quuux FOR VALUES IN (2);'); + ok(!is_table_verified($output), 'tables not scanned'); + like($output, ++>>>>>>> theirs qr/updated partition constraint for default partition "quuux_default1" is implied by existing constraints/, 'updated partition constraint for default partition quuux_default1'); run_sql_command('DROP TABLE quuux;'); diff --cc src/test/modules/test_pg_dump/t/001_base.pl index 1d84b86ad9a,8127f7f01b0..00000000000 --- a/src/test/modules/test_pg_dump/t/001_base.pl +++ b/src/test/modules/test_pg_dump/t/001_base.pl @@@ -981,8 -981,7 +981,12 @@@ foreach my $run (sort keys %pgdump_runs if ($tests{$test}->{like}->{$test_key} && !defined($tests{$test}->{unlike}->{$test_key})) { ++<<<<<<< ours + if (!like( + $output_file, $tests{$test}->{regexp}, ++======= + if (!like($output_file, $tests{$test}->{regexp}, ++>>>>>>> theirs "$run: should dump $test")) { diag("Review $run results in $tempdir"); @@@ -990,8 -989,7 +994,12 @@@ } else { ++<<<<<<< ours + if (!unlike( + $output_file, $tests{$test}->{regexp}, ++======= + if (!unlike($output_file, $tests{$test}->{regexp}, ++>>>>>>> theirs "$run: should not dump $test")) { diag("Review $run results in $tempdir"); diff --cc src/test/recovery/t/003_recovery_targets.pl index 862e74b2ade,c539eac230a..00000000000 --- a/src/test/recovery/t/003_recovery_targets.pl +++ b/src/test/recovery/t/003_recovery_targets.pl @@@ -155,9 -155,7 +155,13 @@@ my $res = run_log ok(!$res, 'invalid recovery startup fails'); my $logfile = slurp_file($node_standby->logfile()); ++<<<<<<< ours +like( + $logfile, + qr/multiple recovery targets specified/, ++======= + like($logfile, qr/multiple recovery targets specified/, ++>>>>>>> theirs 'multiple conflicting settings'); # Check behavior when recovery ends before target is reached @@@ -185,9 -183,8 +189,14 @@@ foreach my $i (0 .. 10 * $PostgreSQL::T usleep(100_000); } $logfile = slurp_file($node_standby->logfile()); ++<<<<<<< ours +like( + $logfile, + qr/FATAL: .* recovery ended before configured recovery target was reached/, ++======= + like($logfile, + qr/FATAL: .* recovery ended before configured recovery target was reached/, ++>>>>>>> theirs 'recovery end before target reached is a fatal error'); # Invalid timeline target diff --cc src/test/recovery/t/005_replay_delay.pl index 0cb747f030d,00d20729ce9..00000000000 --- a/src/test/recovery/t/005_replay_delay.pl +++ b/src/test/recovery/t/005_replay_delay.pl @@@ -53,8 -53,8 +53,13 @@@ $node_standby->poll_query_until('postgr # This test is successful if and only if the LSN has been applied with at least # the configured apply delay. ++<<<<<<< ours +cmp_ok(time() - $primary_insert_time, + '>=', $delay, "standby applies WAL only after replication delay"); ++======= + cmp_ok(time() - $primary_insert_time, '>=', $delay, + "standby applies WAL only after replication delay"); ++>>>>>>> theirs # Check that recovery can be paused or resumed expectedly. my $node_standby2 = PostgreSQL::Test::Cluster->new('standby2'); $node_standby2->init_from_backup($node_primary, $backup_name, diff --cc src/test/recovery/t/006_logical_decoding.pl index 96b70b84d5e,15ef646f901..00000000000 --- a/src/test/recovery/t/006_logical_decoding.pl +++ b/src/test/recovery/t/006_logical_decoding.pl @@@ -34,8 -35,7 +34,12 @@@ my ($result, $stdout, $stderr) = $node_ 'template1', qq[START_REPLICATION SLOT test_slot LOGICAL 0/0], replication => 'database'); ++<<<<<<< ours +like( + $stderr, ++======= + like($stderr, ++>>>>>>> theirs qr/replication slot "test_slot" was not created in this database/, "Logical decoding correctly fails to start"); @@@ -54,9 -54,7 +58,13 @@@ like 'template1', qq[START_REPLICATION SLOT s1 LOGICAL 0/1], replication => 'true'); ++<<<<<<< ours +like( + $stderr, + qr/ERROR: logical decoding requires a database connection/, ++======= + like($stderr, qr/ERROR: logical decoding requires a database connection/, ++>>>>>>> theirs "Logical decoding fails on non-database connection"); $node_primary->safe_psql('postgres', diff --cc src/test/recovery/t/020_archive_status.pl index bd86d9fb583,14db4985bde..00000000000 --- a/src/test/recovery/t/020_archive_status.pl +++ b/src/test/recovery/t/020_archive_status.pl @@@ -245,9 -245,7 +245,13 @@@ my $log_location = -s $standby2->logfil $standby2->stop; my $logfile = slurp_file($standby2->logfile, $log_location); ++<<<<<<< ours +like( + $logfile, + qr/archiver process shutting down/, ++======= + like($logfile, qr/archiver process shutting down/, ++>>>>>>> theirs 'check shutdown callback of shell archive module'); # Test that we can enter and leave backup mode without crashes diff --cc src/test/recovery/t/024_archive_recovery.pl index 893d8959cad,b80b60a4c0b..00000000000 --- a/src/test/recovery/t/024_archive_recovery.pl +++ b/src/test/recovery/t/024_archive_recovery.pl @@@ -91,8 -91,7 +91,12 @@@ sub test_recovery_wal_level_minima # Confirm that the archive recovery fails with an expected error my $logfile = slurp_file($recovery_node->logfile()); ++<<<<<<< ours + like( + $logfile, ++======= + like($logfile, ++>>>>>>> theirs qr/FATAL: .* WAL was generated with "wal_level=minimal", cannot continue recovering/, "$node_text ends with an error because it finds WAL generated with \"wal_level=minimal\"" ); diff --cc src/test/recovery/t/035_standby_logical_decoding.pl index ebe2fae1789,b74ed31c4e5..00000000000 --- a/src/test/recovery/t/035_standby_logical_decoding.pl +++ b/src/test/recovery/t/035_standby_logical_decoding.pl @@@ -394,8 -394,7 +394,12 @@@ foreach my $i (0 .. 10 * $PostgreSQL::T # Confirm that the server startup fails with an expected error my $logfile = slurp_file($node_standby->logfile()); ++<<<<<<< ours +like( + $logfile, ++======= + like($logfile, ++>>>>>>> theirs qr/FATAL: .* logical replication slot ".*" exists on the standby, but "hot_standby" = "off"/, "the standby ends with an error during startup because hot_standby was disabled" ); @@@ -488,8 -487,7 +492,12 @@@ $node_primary->wait_for_replay_catchup( ($result, $stdout, $stderr) = $node_standby->psql('otherdb', "SELECT lsn FROM pg_logical_slot_peek_changes('behaves_ok_activeslot', NULL, NULL) ORDER BY lsn DESC LIMIT 1;" ); ++<<<<<<< ours +like( + $stderr, ++======= + like($stderr, ++>>>>>>> theirs qr/replication slot "behaves_ok_activeslot" was not created in this database/, "replaying logical slot from another database fails"); @@@ -622,10 -620,9 +630,16 @@@ check_pg_recvlogical_stderr($handle 'postgres', qq[select pg_copy_logical_replication_slot('vacuum_full_inactiveslot', 'vacuum_full_inactiveslot_copy');], replication => 'database'); ++<<<<<<< ours +like( + $stderr, + qr/ERROR: cannot copy invalidated replication slot "vacuum_full_inactiveslot"/, + "invalidated slot cannot be copied"); ++======= + like($stderr, + qr/ERROR: cannot copy invalidated replication slot "vacuum_full_inactiveslot"/, + "invalidated slot cannot be copied"); ++>>>>>>> theirs # Set hot_standby_feedback to on change_hot_standby_feedback_and_wait_for_xmins(1, 1); diff --cc src/test/recovery/t/040_standby_failover_slots_sync.pl index 1627e619b1b,ed093b456a1..00000000000 --- a/src/test/recovery/t/040_standby_failover_slots_sync.pl +++ b/src/test/recovery/t/040_standby_failover_slots_sync.pl @@@ -100,10 -100,9 +100,16 @@@ $subscriber1->safe_psql('postgres' # Disable failover for enabled subscription my ($result, $stdout, $stderr) = $subscriber1->psql('postgres', "ALTER SUBSCRIPTION regress_mysub1 SET (failover = false)"); ++<<<<<<< ours +like( + $stderr, + qr/ERROR: cannot set option "failover" for enabled subscription/, + "altering failover is not allowed for enabled subscription"); ++======= + like($stderr, + qr/ERROR: cannot set option "failover" for enabled subscription/, + "altering failover is not allowed for enabled subscription"); ++>>>>>>> theirs ################################################## # Test that pg_sync_replication_slots() cannot be executed on a non-standby server. @@@ -111,10 -110,9 +117,16 @@@ ($result, $stdout, $stderr) = $publisher->psql('postgres', "SELECT pg_sync_replication_slots();"); ++<<<<<<< ours +like( + $stderr, + qr/ERROR: replication slots can only be synchronized to a standby server/, + "cannot sync slots on a non-standby server"); ++======= + like($stderr, + qr/ERROR: replication slots can only be synchronized to a standby server/, + "cannot sync slots on a non-standby server"); ++>>>>>>> theirs ################################################## # Test logical failover slots corresponding to different plugins can be @@@ -315,28 -313,25 +327,46 @@@ $standby1->reload # Attempting to perform logical decoding on a synced slot should result in an error ($result, $stdout, $stderr) = $standby1->psql('postgres', "select * from pg_logical_slot_get_changes('lsub1_slot', NULL, NULL);"); ++<<<<<<< ours +like( + $stderr, + qr/ERROR: cannot use replication slot "lsub1_slot" for logical decoding/, + "logical decoding is not allowed on synced slot"); ++======= + like($stderr, + qr/ERROR: cannot use replication slot "lsub1_slot" for logical decoding/, + "logical decoding is not allowed on synced slot"); ++>>>>>>> theirs # Attempting to alter a synced slot should result in an error ($result, $stdout, $stderr) = $standby1->psql( 'postgres', qq[ALTER_REPLICATION_SLOT lsub1_slot (failover);], replication => 'database'); ++<<<<<<< ours +like( + $stderr, + qr/ERROR: cannot alter replication slot "lsub1_slot"/, + "synced slot on standby cannot be altered"); ++======= + like($stderr, + qr/ERROR: cannot alter replication slot "lsub1_slot"/, + "synced slot on standby cannot be altered"); ++>>>>>>> theirs # Attempting to drop a synced slot should result in an error ($result, $stdout, $stderr) = $standby1->psql('postgres', "SELECT pg_drop_replication_slot('lsub1_slot');"); ++<<<<<<< ours +like( + $stderr, + qr/ERROR: cannot drop replication slot "lsub1_slot"/, + "synced slot on standby cannot be dropped"); ++======= + like($stderr, + qr/ERROR: cannot drop replication slot "lsub1_slot"/, + "synced slot on standby cannot be dropped"); ++>>>>>>> theirs ################################################## # Test that we cannot synchronize slots if dbname is not specified in the @@@ -344,26 -339,13 +374,32 @@@ ################################################## $standby1->append_conf('postgresql.conf', "primary_conninfo = '$connstr_1'"); + +# Capture the log position before reload to check for walreceiver +# termination. +$log_offset = -s $standby1->logfile; + $standby1->reload; +# Wait for the walreceiver to be stopped and restarted after a configuration +# reload. When primary_conninfo changes, the walreceiver should be +# terminated and a new one spawned. +$standby1->wait_for_log( + qr/FATAL: .* terminating walreceiver process due to administrator command/, + $log_offset); + ($result, $stdout, $stderr) = $standby1->psql('postgres', "SELECT pg_sync_replication_slots();"); ++<<<<<<< ours +like( + $stderr, + qr/ERROR: replication slot synchronization requires "dbname" to be specified in "primary_conninfo"/, + "cannot sync slots if dbname is not specified in primary_conninfo"); ++======= + like($stderr, + qr/ERROR: replication slot synchronization requires "dbname" to be specified in "primary_conninfo"/, + "cannot sync slots if dbname is not specified in primary_conninfo"); ++>>>>>>> theirs # Add the dbname back to the primary_conninfo for further tests $standby1->append_conf('postgresql.conf', @@@ -399,10 -381,9 +435,16 @@@ $cascading_standby->start ($result, $stdout, $stderr) = $cascading_standby->psql('postgres', "SELECT pg_sync_replication_slots();"); ++<<<<<<< ours +like( + $stderr, + qr/ERROR: cannot synchronize replication slots from a standby server/, + "cannot sync slots to a cascading standby server"); ++======= + like($stderr, + qr/ERROR: cannot synchronize replication slots from a standby server/, + "cannot sync slots to a cascading standby server"); ++>>>>>>> theirs $cascading_standby->stop; diff --cc src/test/recovery/t/042_low_level_backup.pl index 20b1abf8999,0c8c51d52d8..00000000000 --- a/src/test/recovery/t/042_low_level_backup.pl +++ b/src/test/recovery/t/042_low_level_backup.pl @@@ -105,8 -105,8 +105,13 @@@ copy $node_replica->start; ++<<<<<<< ours +is($node_replica->safe_psql('postgres', $canary_query), + '0', 'canary is missing'); ++======= + is($node_replica->safe_psql('postgres', $canary_query), 0, + 'canary is missing'); ++>>>>>>> theirs # Check log to ensure that crash recovery was used as there is no # backup_label. @@@ -134,8 -134,8 +139,13 @@@ $node_replica->init_from_backup($node_p has_restoring => 1); $node_replica->start; ++<<<<<<< ours +is($node_replica->safe_psql('postgres', $canary_query), + '1', 'canary is present'); ++======= + is($node_replica->safe_psql('postgres', $canary_query), 1, + 'canary is present'); ++>>>>>>> theirs # Check log to ensure that backup_label was used for recovery. ok($node_replica->log_contains('starting backup recovery with redo LSN'), diff --cc src/test/recovery/t/044_invalidate_inactive_slots.pl index 2cd34f5ef34,7b176ade3e3..00000000000 --- a/src/test/recovery/t/044_invalidate_inactive_slots.pl +++ b/src/test/recovery/t/044_invalidate_inactive_slots.pl @@@ -94,9 -94,7 +94,13 @@@ my ($result, $stdout, $stderr) 'postgres', qq[ SELECT pg_replication_slot_advance('logical_slot', '0/1'); ]); ++<<<<<<< ours +like( + $stderr, + qr/can no longer access replication slot "logical_slot"/, ++======= + like($stderr, qr/can no longer access replication slot "logical_slot"/, ++>>>>>>> theirs "detected error upon trying to acquire invalidated slot on node") or die "could not detect error upon trying to acquire invalidated slot \"logical_slot\" on node"; diff --cc src/test/subscription/t/001_rep_changes.pl index 430c1246d14,e928dfe7fc9..00000000000 --- a/src/test/subscription/t/001_rep_changes.pl +++ b/src/test/subscription/t/001_rep_changes.pl @@@ -364,16 -364,13 +364,26 @@@ $node_publisher->safe_psql('postgres', $node_publisher->wait_for_catchup('tap_sub'); my $logfile = slurp_file($node_subscriber->logfile, $log_location); ++<<<<<<< ours +like( + $logfile, + qr/conflict detected on relation "public.tab_full_pk": conflict=update_missing.*\n.*DETAIL:.* Could not find the row to be updated.*\n.*Remote row \(1, quux\); replica identity \(a\)=\(1\)/m, + 'update target row is missing'); +like( + $logfile, + qr/conflict detected on relation "public.tab_full": conflict=update_missing.*\n.*DETAIL:.* Could not find the row to be updated.*\n.*Remote row \(26\); replica identity full \(25\)/m, + 'update target row is missing'); +like( + $logfile, ++======= + like($logfile, + qr/conflict detected on relation "public.tab_full_pk": conflict=update_missing.*\n.*DETAIL:.* Could not find the row to be updated.*\n.*Remote row \(1, quux\); replica identity \(a\)=\(1\)/m, + 'update target row is missing'); + like($logfile, + qr/conflict detected on relation "public.tab_full": conflict=update_missing.*\n.*DETAIL:.* Could not find the row to be updated.*\n.*Remote row \(26\); replica identity full \(25\)/m, + 'update target row is missing'); + like($logfile, ++>>>>>>> theirs qr/conflict detected on relation "public.tab_full_pk": conflict=delete_missing.*\n.*DETAIL:.* Could not find the row to be deleted.*\n.*Replica identity \(a\)=\(2\)/m, 'delete target row is missing'); @@@ -518,9 -515,7 +528,13 @@@ $node_publisher->safe_psql('postgres', $node_publisher->wait_for_catchup('tap_sub'); $logfile = slurp_file($node_publisher->logfile, $log_location); ++<<<<<<< ours +like( + $logfile, + qr/skipped replication of an empty transaction with XID/, ++======= + like($logfile, qr/skipped replication of an empty transaction with XID/, ++>>>>>>> theirs 'empty transaction is skipped'); $result = @@@ -593,8 -588,7 +607,12 @@@ CREATE TABLE skip_wal() CREATE PUBLICATION tap_pub2 FOR TABLE skip_wal; ROLLBACK; }); ++<<<<<<< ours +like( + $reterr, ++======= + like($reterr, ++>>>>>>> theirs qr/WARNING: "wal_level" is insufficient to publish logical changes/, 'CREATE PUBLICATION while "wal_level=minimal"'); diff --cc src/test/subscription/t/007_ddl.pl index 16cb7bca8f2,66c659622a9..00000000000 --- a/src/test/subscription/t/007_ddl.pl +++ b/src/test/subscription/t/007_ddl.pl @@@ -45,8 -45,7 +45,12 @@@ pass "subscription disable and drop in my ($ret, $stdout, $stderr) = $node_subscriber->psql('postgres', "CREATE SUBSCRIPTION mysub1 CONNECTION '$publisher_connstr' PUBLICATION mypub, non_existent_pub" ); ++<<<<<<< ours +like( + $stderr, ++======= + like($stderr, ++>>>>>>> theirs qr/WARNING: publication "non_existent_pub" does not exist on the publisher/, "Create subscription throws warning for non-existent publication"); @@@ -57,8 -56,7 +61,12 @@@ $node_subscriber->wait_for_subscription ($ret, $stdout, $stderr) = $node_subscriber->psql('postgres', "ALTER SUBSCRIPTION mysub1 ADD PUBLICATION non_existent_pub1, non_existent_pub2" ); ++<<<<<<< ours +like( + $stderr, ++======= + like($stderr, ++>>>>>>> theirs qr/WARNING: publications "non_existent_pub1", "non_existent_pub2" do not exist on the publisher/, "Alter subscription add publication throws warning for non-existent publications" ); @@@ -66,8 -64,7 +74,12 @@@ # Specifying non-existent publication along with set publication. ($ret, $stdout, $stderr) = $node_subscriber->psql('postgres', "ALTER SUBSCRIPTION mysub1 SET PUBLICATION non_existent_pub"); ++<<<<<<< ours +like( + $stderr, ++======= + like($stderr, ++>>>>>>> theirs qr/WARNING: publication "non_existent_pub" does not exist on the publisher/, "Alter subscription set publication throws warning for non-existent publication" ); diff --cc src/test/subscription/t/013_partition.pl index 3a5e92d094f,ff6c0e9128c..00000000000 --- a/src/test/subscription/t/013_partition.pl +++ b/src/test/subscription/t/013_partition.pl @@@ -367,21 -367,17 +367,35 @@@ $node_publisher->wait_for_catchup('sub1 $node_publisher->wait_for_catchup('sub2'); my $logfile = slurp_file($node_subscriber1->logfile(), $log_location); ++<<<<<<< ours +like( + $logfile, + qr/conflict detected on relation "public.tab1_2_2": conflict=update_missing.*\n.*DETAIL:.* Could not find the row to be updated.*\n.*Remote row \(null, 4, quux\); replica identity \(a\)=\(4\)/, + 'update target row is missing in tab1_2_2'); +like( + $logfile, + qr/conflict detected on relation "public.tab1_1": conflict=delete_missing.*\n.*DETAIL:.* Could not find the row to be deleted.*\n.*Replica identity \(a\)=\(1\)/, + 'delete target row is missing in tab1_1'); +like( + $logfile, + qr/conflict detected on relation "public.tab1_2_2": conflict=delete_missing.*\n.*DETAIL:.* Could not find the row to be deleted.*\n.*Replica identity \(a\)=\(4\)/, + 'delete target row is missing in tab1_2_2'); +like( + $logfile, + qr/conflict detected on relation "public.tab1_def": conflict=delete_missing.*\n.*DETAIL:.* Could not find the row to be deleted.*\n.*Replica identity \(a\)=\(10\)/, ++======= + like( $logfile, + qr/conflict detected on relation "public.tab1_2_2": conflict=update_missing.*\n.*DETAIL:.* Could not find the row to be updated.*\n.*Remote row \(null, 4, quux\); replica identity \(a\)=\(4\)/, + 'update target row is missing in tab1_2_2'); + like( $logfile, + qr/conflict detected on relation "public.tab1_1": conflict=delete_missing.*\n.*DETAIL:.* Could not find the row to be deleted.*\n.*Replica identity \(a\)=\(1\)/, + 'delete target row is missing in tab1_1'); + like( $logfile, + qr/conflict detected on relation "public.tab1_2_2": conflict=delete_missing.*\n.*DETAIL:.* Could not find the row to be deleted.*\n.*Replica identity \(a\)=\(4\)/, + 'delete target row is missing in tab1_2_2'); + like( $logfile, + qr/conflict detected on relation "public.tab1_def": conflict=delete_missing.*\n.*DETAIL:.* Could not find the row to be deleted.*\n.*Replica identity \(a\)=\(10\)/, ++>>>>>>> theirs 'delete target row is missing in tab1_def'); # Tests for replication using root table identity and schema @@@ -784,13 -780,11 +798,21 @@@ $node_publisher->wait_for_catchup('sub_ $node_publisher->wait_for_catchup('sub2'); $logfile = slurp_file($node_subscriber1->logfile(), $log_location); ++<<<<<<< ours +like( + $logfile, + qr/conflict detected on relation "public.tab2_1": conflict=update_missing.*\n.*DETAIL:.* Could not find the row to be updated.*\n.*Remote row \(pub_tab2, quux, 5\); replica identity \(a\)=\(5\)/, + 'update target row is missing in tab2_1'); +like( + $logfile, + qr/conflict detected on relation "public.tab2_1": conflict=delete_missing.*\n.*DETAIL:.* Could not find the row to be deleted.*\n.*Replica identity \(a\)=\(1\)/, ++======= + like( $logfile, + qr/conflict detected on relation "public.tab2_1": conflict=update_missing.*\n.*DETAIL:.* Could not find the row to be updated.*\n.*Remote row \(pub_tab2, quux, 5\); replica identity \(a\)=\(5\)/, + 'update target row is missing in tab2_1'); + like( $logfile, + qr/conflict detected on relation "public.tab2_1": conflict=delete_missing.*\n.*DETAIL:.* Could not find the row to be deleted.*\n.*Replica identity \(a\)=\(1\)/, ++>>>>>>> theirs 'delete target row is missing in tab2_1'); # Enable the track_commit_timestamp to detect the conflict when attempting @@@ -807,9 -801,8 +829,14 @@@ $node_publisher->safe_psql('postgres' $node_publisher->wait_for_catchup('sub_viaroot'); $logfile = slurp_file($node_subscriber1->logfile(), $log_location); ++<<<<<<< ours +like( + $logfile, + qr/conflict detected on relation "public.tab2_1": conflict=update_origin_differs.*\n.*DETAIL:.* Updating the row that was modified locally in transaction [0-9]+ at .*\n.*Existing local row \(yyy, null, 3\); remote row \(pub_tab2, quux, 3\); replica identity \(a\)=\(3\)/, ++======= + like( $logfile, + qr/conflict detected on relation "public.tab2_1": conflict=update_origin_differs.*\n.*DETAIL:.* Updating the row that was modified locally in transaction [0-9]+ at .*\n.*Existing local row \(yyy, null, 3\); remote row \(pub_tab2, quux, 3\); replica identity \(a\)=\(3\)/, ++>>>>>>> theirs 'updating a row that was modified by a different origin'); # The remaining tests no longer test conflict detection. diff --cc src/test/subscription/t/027_nosuperuser.pl index 691731743df,2468e058b1f..00000000000 --- a/src/test/subscription/t/027_nosuperuser.pl +++ b/src/test/subscription/t/027_nosuperuser.pl @@@ -399,8 -399,7 +399,12 @@@ SKIP isnt($ret, 0, "non zero exit for subscription whose owner is a non-superuser must specify password parameter of the connection string" ); ++<<<<<<< ours + like( + $stderr, ++======= + like($stderr, ++>>>>>>> theirs qr/DETAIL: Non-superusers must provide a password in the connection string./, 'subscription whose owner is a non-superuser must specify password parameter of the connection string' ); diff --cc src/test/subscription/t/031_column_list.pl index 2c14270af21,3bbab7f6e83..00000000000 --- a/src/test/subscription/t/031_column_list.pl +++ b/src/test/subscription/t/031_column_list.pl @@@ -1272,9 -1272,8 +1272,14 @@@ my ($cmdret, $stdout, $stderr) = $node_ CREATE SUBSCRIPTION sub1 CONNECTION '$publisher_connstr' PUBLICATION pub_mix_1, pub_mix_2; )); ++<<<<<<< ours +like( + $stderr, + qr/cannot use different column lists for table "public.test_mix_1" in different publications/, ++======= + like( $stderr, + qr/cannot use different column lists for table "public.test_mix_1" in different publications/, ++>>>>>>> theirs 'different column lists detected'); # TEST: If the column list is changed after creating the subscription, we diff --cc src/test/subscription/t/035_conflicts.pl index a94bde16f53,f879b18eac3..00000000000 --- a/src/test/subscription/t/035_conflicts.pl +++ b/src/test/subscription/t/035_conflicts.pl @@@ -224,10 -224,9 +224,16 @@@ ok( $node_B->poll_query_until # Alter retain_dead_tuples for enabled subscription my ($cmdret, $stdout, $stderr) = $node_A->psql('postgres', "ALTER SUBSCRIPTION $subname_AB SET (retain_dead_tuples = true)"); ++<<<<<<< ours +like( + $stderr, + qr/ERROR: cannot set option \"retain_dead_tuples\" for enabled subscription/, + "altering retain_dead_tuples is not allowed for enabled subscription"); ++======= + like($stderr, + qr/ERROR: cannot set option \"retain_dead_tuples\" for enabled subscription/, + "altering retain_dead_tuples is not allowed for enabled subscription"); ++>>>>>>> theirs # Disable the subscription $node_A->psql('postgres', "ALTER SUBSCRIPTION $subname_AB DISABLE;"); @@@ -240,10 -239,9 +246,16 @@@ $node_A->poll_query_until('postgres' # Enable retain_dead_tuples for disabled subscription ($cmdret, $stdout, $stderr) = $node_A->psql('postgres', "ALTER SUBSCRIPTION $subname_AB SET (retain_dead_tuples = true);"); ++<<<<<<< ours +like( + $stderr, + qr/NOTICE: deleted rows to detect conflicts would not be removed until the subscription is enabled/, + "altering retain_dead_tuples is allowed for disabled subscription"); ++======= + like($stderr, + qr/NOTICE: deleted rows to detect conflicts would not be removed until the subscription is enabled/, + "altering retain_dead_tuples is allowed for disabled subscription"); ++>>>>>>> theirs # Re-enable the subscription $node_A->safe_psql('postgres', "ALTER SUBSCRIPTION $subname_AB ENABLE;"); @@@ -264,11 -262,9 +276,17 @@@ ok( $node_A->poll_query_until ($cmdret, $stdout, $stderr) = $node_A->psql('postgres', "ALTER SUBSCRIPTION $subname_AB SET (origin = any);"); ++<<<<<<< ours +like( + $stderr, + qr/WARNING: subscription "tap_sub_a_b" enabled retain_dead_tuples but might not reliably detect conflicts for changes from different origins/, + "warn of the possibility of receiving changes from origins other than the publisher" +); ++======= + like($stderr, + qr/WARNING: subscription "tap_sub_a_b" enabled retain_dead_tuples but might not reliably detect conflicts for changes from different origins/, + "warn of the possibility of receiving changes from origins other than the publisher"); ++>>>>>>> theirs # Reset the origin to none $node_A->psql('postgres', @@@ -306,19 -302,17 +324,30 @@@ $node_A->safe_psql('postgres', "DELETE 'postgres', qq(VACUUM (verbose) public.tab;) ); ++<<<<<<< ours +like( + $stderr, + qr/1 are dead but not yet removable/, + 'the deleted column is non-removable'); ++======= + like($stderr, + qr/1 are dead but not yet removable/, + 'the deleted column is non-removable'); ++>>>>>>> theirs # Ensure the DELETE is replayed on Node B $node_A->wait_for_catchup($subname_BA); # Check the conflict detected on Node B my $logfile = slurp_file($node_B->logfile(), $log_location); ++<<<<<<< ours +like( + $logfile, + qr/conflict detected on relation "public.tab": conflict=delete_origin_differs.* ++======= + like($logfile, + qr/conflict detected on relation "public.tab": conflict=delete_origin_differs.* ++>>>>>>> theirs .*DETAIL:.* Deleting the row that was modified locally in transaction [0-9]+ at .* .*Existing local row \(1, 3\); replica identity \(a\)=\(1\)/, 'delete target row was modified in tab'); @@@ -330,12 -324,11 +359,17 @@@ $node_A->safe_psql $node_B->wait_for_catchup($subname_AB); $logfile = slurp_file($node_A->logfile(), $log_location); ++<<<<<<< ours +like( + $logfile, + qr/conflict detected on relation "public.tab": conflict=update_deleted.* ++======= + like( $logfile, + qr/conflict detected on relation "public.tab": conflict=update_deleted.* ++>>>>>>> theirs .*DETAIL:.* The row to be updated was deleted locally in transaction [0-9]+ at .* .*Remote row \(1, 3\); replica identity \(a\)=\(1\)/, - 'update target row was deleted in tab'); + 'update target row was deleted in tab'); # Remember the next transaction ID to be assigned my $next_xid = $node_A->safe_psql('postgres', "SELECT txid_current() + 1;"); @@@ -349,6 -342,15 +383,18 @@@ ok( $node_A->poll_query_until ), "the xmin value of slot 'pg_conflict_detection' is updated on Node A"); ++<<<<<<< ours ++======= + # Confirm that the dead tuple can be removed now + ($cmdret, $stdout, $stderr) = $node_A->psql( + 'postgres', qq(VACUUM (verbose) public.tab;) + ); + + like( $stderr, + qr/1 removed, 1 remain, 0 are dead but not yet removable/, + 'the deleted column is removed'); + ++>>>>>>> theirs ############################################################################### # Ensure that the deleted tuple needed to detect an update_deleted conflict is # accessible via a sequential table scan. @@@ -378,9 -380,8 +424,14 @@@ $node_A->safe_psql $node_B->wait_for_catchup($subname_AB); $logfile = slurp_file($node_A->logfile(), $log_location); ++<<<<<<< ours +like( + $logfile, + qr/conflict detected on relation "public.tab": conflict=update_deleted.* ++======= + like( $logfile, + qr/conflict detected on relation "public.tab": conflict=update_deleted.* ++>>>>>>> theirs .*DETAIL:.* The row to be updated was deleted locally in transaction [0-9]+ at .* .*Remote row \(2, 4\); replica identity full \(2, 2\)/, 'update target row was deleted in tab'); @@@ -510,9 -511,7 +561,13 @@@ if ($injection_points_supported != 0 ($cmdret, $stdout, $stderr) = $node_A->psql('postgres', qq(VACUUM (verbose) public.tab;)); ++<<<<<<< ours + like( + $stderr, + qr/1 are dead but not yet removable/, ++======= + like($stderr, qr/1 are dead but not yet removable/, ++>>>>>>> theirs 'the deleted column is non-removable'); $log_location = -s $node_A->logfile; @@@ -537,9 -536,8 +592,14 @@@ $node_B->wait_for_catchup($subname_AB); $logfile = slurp_file($node_A->logfile(), $log_location); ++<<<<<<< ours + like( + $logfile, + qr/conflict detected on relation "public.tab": conflict=update_deleted.* ++======= + like( $logfile, + qr/conflict detected on relation "public.tab": conflict=update_deleted.* ++>>>>>>> theirs .*DETAIL:.* The row to be updated was deleted locally in transaction [0-9]+ at .* .*Remote row \(1, 2\); replica identity full \(1, 1\)/, 'update target row was deleted in tab'); @@@ -557,6 -555,13 +617,16 @@@ "the xmin value of slot 'pg_conflict_detection' is updated on subscriber" ); ++<<<<<<< ours ++======= + # Confirm that the dead tuple can be removed now + ($cmdret, $stdout, $stderr) = + $node_A->psql('postgres', qq(VACUUM (verbose) public.tab;)); + + like($stderr, qr/1 removed, 0 remain, 0 are dead but not yet removable/, + 'the deleted column is removed'); + ++>>>>>>> theirs # Get the commit timestamp for the publisher's update my $pub_ts = $node_B->safe_psql('postgres', "SELECT pg_xact_commit_timestamp(xmin) from tab where a=1;");