agora inbox for [email protected]help / color / mirror / Atom feed
[PATCH v12 3/3] pg_test_timing: Add --fast flag to test fast timing, report time source 167+ messages / 2 participants [nested] [flat]
* [PATCH v12 3/3] pg_test_timing: Add --fast flag to test fast timing, report time source @ 2025-07-27 15:48 Lukas Fittl <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Lukas Fittl @ 2025-07-27 15:48 UTC (permalink / raw) In passing also reduce the per-loop overhead caused by repeated divisions in INSTR_TIME_GET_NANOSEC when the ticks variable has become very large, instead diff first and then turn it into nanosecs. --- src/bin/pg_test_timing/pg_test_timing.c | 59 +++++++++++++++++++------ src/include/portability/instr_time.h | 30 ++++++++----- 2 files changed, 65 insertions(+), 24 deletions(-) diff --git a/src/bin/pg_test_timing/pg_test_timing.c b/src/bin/pg_test_timing/pg_test_timing.c index a5621251afc..b77ef2063b6 100644 --- a/src/bin/pg_test_timing/pg_test_timing.c +++ b/src/bin/pg_test_timing/pg_test_timing.c @@ -16,6 +16,7 @@ static const char *progname; static unsigned int test_duration = 3; static double max_rprct = 99.99; +static bool fast_timing = false; /* record duration in powers of 2 nanoseconds */ static long long int histogram[32]; @@ -56,6 +57,7 @@ handle_args(int argc, char *argv[]) static struct option long_options[] = { {"duration", required_argument, NULL, 'd'}, {"cutoff", required_argument, NULL, 'c'}, + {"fast", no_argument, NULL, 'f'}, {NULL, 0, NULL, 0} }; @@ -68,7 +70,7 @@ handle_args(int argc, char *argv[]) { if (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-?") == 0) { - printf(_("Usage: %s [-d DURATION] [-c CUTOFF]\n"), progname); + printf(_("Usage: %s [-d DURATION] [-c CUTOFF] [--fast]\n"), progname); exit(0); } if (strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-V") == 0) @@ -78,7 +80,7 @@ handle_args(int argc, char *argv[]) } } - while ((option = getopt_long(argc, argv, "d:c:", + while ((option = getopt_long(argc, argv, "d:c:f:", long_options, &optindex)) != -1) { switch (option) @@ -125,6 +127,10 @@ handle_args(int argc, char *argv[]) } break; + case 'f': + fast_timing = true; + break; + default: fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); @@ -155,11 +161,31 @@ test_timing(unsigned int duration) uint64 total_time; int64 time_elapsed = 0; uint64 loop_count = 0; - uint64 prev, - cur; instr_time start_time, end_time, - temp; + prev, + cur; + char *time_source = NULL; + bool fast_timing_used = false; + + INSTR_TIME_INITIALIZE(); + +#if !defined(WIN32) && defined(__x86_64__) && defined(__linux__) + if (fast_timing && has_rdtsc) + { + time_source = "RDTSC"; + fast_timing_used = true; + } + else if (has_rdtscp) + time_source = "RDTSCP"; + else + time_source = PG_INSTR_CLOCK_NAME; +#else + time_source = PG_INSTR_CLOCK_NAME; +#endif + if (fast_timing && !fast_timing_used) + printf(_("Warning: Fast timing requested, but not available - regular timing source will be used\n")); + printf(_("Time source: %s\n"), time_source); /* * Pre-zero the statistics data structures. They're already zero by @@ -173,8 +199,11 @@ test_timing(unsigned int duration) total_time = duration > 0 ? duration * INT64CONST(1000000000) : 0; - INSTR_TIME_SET_CURRENT(start_time); - cur = INSTR_TIME_GET_NANOSEC(start_time); + if (fast_timing) + INSTR_TIME_SET_CURRENT_FAST(start_time); + else + INSTR_TIME_SET_CURRENT(start_time); + cur = start_time; while (time_elapsed < total_time) { @@ -182,9 +211,11 @@ test_timing(unsigned int duration) bits; prev = cur; - INSTR_TIME_SET_CURRENT(temp); - cur = INSTR_TIME_GET_NANOSEC(temp); - diff = cur - prev; + if (fast_timing) + INSTR_TIME_SET_CURRENT_FAST(cur); + else + INSTR_TIME_SET_CURRENT(cur); + diff = INSTR_TIME_DIFF_NANOSEC(cur, prev); /* Did time go backwards? */ if (unlikely(diff < 0)) @@ -217,11 +248,13 @@ test_timing(unsigned int duration) largest_diff_count++; loop_count++; - INSTR_TIME_SUBTRACT(temp, start_time); - time_elapsed = INSTR_TIME_GET_NANOSEC(temp); + time_elapsed = INSTR_TIME_DIFF_NANOSEC(cur, start_time); } - INSTR_TIME_SET_CURRENT(end_time); + if (fast_timing) + INSTR_TIME_SET_CURRENT_FAST(end_time); + else + INSTR_TIME_SET_CURRENT(end_time); INSTR_TIME_SUBTRACT(end_time, start_time); diff --git a/src/include/portability/instr_time.h b/src/include/portability/instr_time.h index e2e339a0c4f..f02296f1026 100644 --- a/src/include/portability/instr_time.h +++ b/src/include/portability/instr_time.h @@ -112,10 +112,13 @@ extern int64 max_ticks_no_overflow; */ #if defined(__darwin__) && defined(CLOCK_MONOTONIC_RAW) #define PG_INSTR_CLOCK CLOCK_MONOTONIC_RAW +#define PG_INSTR_CLOCK_NAME "clock_gettime (CLOCK_MONOTONIC_RAW)" #elif defined(CLOCK_MONOTONIC) #define PG_INSTR_CLOCK CLOCK_MONOTONIC +#define PG_INSTR_CLOCK_NAME "clock_gettime (CLOCK_MONOTONIC)" #else #define PG_INSTR_CLOCK CLOCK_REALTIME +#define PG_INSTR_CLOCK_NAME "clock_gettime (CLOCK_REALTIME)" #endif #if defined(__x86_64__) && defined(__linux__) @@ -174,7 +177,7 @@ pg_get_ticks(void) } static inline int64_t -pg_ticks_to_ns(instr_time t) +pg_ticks_to_ns(int64 ticks) { /* * Would multiplication overflow? If so perform computation in two parts. @@ -183,7 +186,7 @@ pg_ticks_to_ns(instr_time t) */ int64 ns = 0; - if (unlikely(t.ticks > max_ticks_no_overflow)) + if (unlikely(ticks > max_ticks_no_overflow)) { /* * Compute how often the maximum number of ticks fits completely into @@ -192,7 +195,7 @@ pg_ticks_to_ns(instr_time t) * value. In a 2nd step we adjust the number of elapsed ticks and * convert the remaining ticks. */ - int64 count = t.ticks / max_ticks_no_overflow; + int64 count = ticks / max_ticks_no_overflow; int64 max_ns = max_ticks_no_overflow * ticks_per_ns_scaled / TICKS_TO_NS_PRECISION; ns = max_ns * count; @@ -201,11 +204,11 @@ pg_ticks_to_ns(instr_time t) * Subtract the ticks that we now already accounted for, so that they * don't get counted twice. */ - t.ticks -= count * max_ticks_no_overflow; - Assert(t.ticks >= 0); + ticks -= count * max_ticks_no_overflow; + Assert(ticks >= 0); } - ns += t.ticks * ticks_per_ns_scaled / TICKS_TO_NS_PRECISION; + ns += ticks * ticks_per_ns_scaled / TICKS_TO_NS_PRECISION; return ns; } @@ -226,14 +229,14 @@ pg_initialize_get_ticks() #define INSTR_TIME_SET_CURRENT(t) \ ((t) = pg_get_ticks()) -#define INSTR_TIME_GET_NANOSEC(t) \ - pg_ticks_to_ns(t) - +#define INSTR_TIME_TICKS_TO_NANOSEC(ticks) \ + (pg_ticks_to_ns(ticks)) #else /* WIN32 */ /* Use QueryPerformanceCounter() */ +#define PG_INSTR_CLOCK_NAME "QueryPerformanceCounter" /* helper for INSTR_TIME_SET_CURRENT / INSTR_TIME_SET_CURRENT_FAST */ static inline instr_time @@ -265,8 +268,8 @@ GetTimerFrequency(void) #define INSTR_TIME_SET_CURRENT(t) \ ((t) = pg_query_performance_counter()) -#define INSTR_TIME_GET_NANOSEC(t) \ - ((int64) ((t).ticks * ((double) NS_PER_S / GetTimerFrequency()))) +#define INSTR_TIME_TICKS_TO_NANOSEC(ticks) \ + ((int64) ((ticks) * ((double) NS_PER_S / GetTimerFrequency()))) #endif /* WIN32 */ @@ -285,9 +288,14 @@ GetTimerFrequency(void) #define INSTR_TIME_SUBTRACT(x,y) \ ((x).ticks -= (y).ticks) +#define INSTR_TIME_DIFF_NANOSEC(x,y) \ + (INSTR_TIME_TICKS_TO_NANOSEC((x).ticks - (y).ticks)) + #define INSTR_TIME_ACCUM_DIFF(x,y,z) \ ((x).ticks += (y).ticks - (z).ticks) +#define INSTR_TIME_GET_NANOSEC(t) \ + (INSTR_TIME_TICKS_TO_NANOSEC((t).ticks)) #define INSTR_TIME_GET_DOUBLE(t) \ ((double) INSTR_TIME_GET_NANOSEC(t) / NS_PER_S) -- 2.47.3 --vtqqtrpooseurzip-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 167+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 167+ messages in thread
end of thread, other threads:[~2026-07-08 21:39 UTC | newest] Thread overview: 167+ messages (download: mbox mbox.gz follow: Atom feed) -- links below jump to the message on this page -- 2025-07-27 15:48 [PATCH v12 3/3] pg_test_timing: Add --fast flag to test fast timing, report time source Lukas Fittl <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
This inbox is served by agora; see mirroring instructions for how to clone and mirror all data and code used for this inbox