agora inbox for [email protected]help / color / mirror / Atom feed
[PATCH] Reproduce filtering issue. 201+ messages / 2 participants [nested] [flat]
* [PATCH] Reproduce filtering issue. @ 2026-03-23 11:50 Antonin Houska <[email protected]> 0 siblings, 0 replies; 201+ messages in thread From: Antonin Houska @ 2026-03-23 11:50 UTC (permalink / raw) --- contrib/test_decoding/expected/filtering.out | 74 ++++++++++++++ contrib/test_decoding/specs/filtering.spec | 101 +++++++++++++++++++ src/backend/executor/nodeModifyTable.c | 2 + src/backend/replication/logical/snapbuild.c | 3 + src/test/isolation/isolationtester.c | 9 +- 5 files changed, 188 insertions(+), 1 deletion(-) create mode 100644 contrib/test_decoding/expected/filtering.out create mode 100644 contrib/test_decoding/specs/filtering.spec diff --git a/contrib/test_decoding/expected/filtering.out b/contrib/test_decoding/expected/filtering.out new file mode 100644 index 00000000000..6ba9690509f --- /dev/null +++ b/contrib/test_decoding/expected/filtering.out @@ -0,0 +1,74 @@ +Parsed test spec with 5 sessions + +starting permutation: s1_assign_xid s3_repack s2_assign_xid s1_rollback s4_insert s5_wakeup_snapbuild s2_rollback s5_wakeup_insert_speculative s4_insert_commit s5_wakeup_repack +injection_points_attach +----------------------- + +(1 row) + +injection_points_attach +----------------------- + +(1 row) + +step s1_assign_xid: + BEGIN; + CREATE TABLE c(i int); + +step s3_repack: + REPACK (CONCURRENTLY) a; + <waiting ...> +step s2_assign_xid: + BEGIN; + CREATE TABLE d(i int); + +step s1_rollback: + ROLLBACK; + +step s4_insert: + BEGIN; + INSERT INTO t(i) + SELECT max(i) + 1 FROM t ON CONFLICT (i) DO UPDATE SET i=EXCLUDED.i; + <waiting ...> +step s5_wakeup_snapbuild: + SELECT injection_points_wakeup('snapbuild-full'); + +injection_points_wakeup +----------------------- + +(1 row) + +step s2_rollback: + ROLLBACK; + +step s5_wakeup_insert_speculative: + SELECT injection_points_wakeup('insert-speculative-before-confirm'); + +injection_points_wakeup +----------------------- + +(1 row) + +step s4_insert: <... completed> +step s4_insert_commit: + COMMIT; + +step s5_wakeup_repack: + SELECT injection_points_wakeup('repack-concurrently-before-lock'); + +injection_points_wakeup +----------------------- + +(1 row) + +step s3_repack: <... completed> +injection_points_detach +----------------------- + +(1 row) + +injection_points_detach +----------------------- + +(1 row) + diff --git a/contrib/test_decoding/specs/filtering.spec b/contrib/test_decoding/specs/filtering.spec new file mode 100644 index 00000000000..a02c9f8facb --- /dev/null +++ b/contrib/test_decoding/specs/filtering.spec @@ -0,0 +1,101 @@ +setup +{ + CREATE TABLE a(i int primary key, j int) WITH (autovacuum_enabled = off); + INSERT INTO a(i, j) VALUES (1, 1), (2, 2); + CREATE TABLE t(i int primary key); + INSERT INTO t(i) VALUES (1); + CREATE EXTENSION injection_points; +} + +session s1 +step s1_assign_xid +{ + BEGIN; + CREATE TABLE c(i int); +} +step s1_rollback +{ + ROLLBACK; +} + +session s2 +step s2_assign_xid +{ + BEGIN; + CREATE TABLE d(i int); +} +step s2_rollback +{ + ROLLBACK; +} + +session s3 +setup +{ + SELECT injection_points_attach('snapbuild-full', 'wait'); + SELECT injection_points_attach('repack-concurrently-before-lock', 'wait'); +} +step s3_repack +{ + REPACK (CONCURRENTLY) a; +} +teardown +{ + SELECT injection_points_detach('repack-concurrently-before-lock'); + SELECT injection_points_detach('snapbuild-full'); +} + +session s4 +setup +{ + SELECT injection_points_set_local(); + SELECT injection_points_attach('insert-speculative-before-confirm', 'wait'); +} +step s4_insert +{ + BEGIN; + INSERT INTO t(i) + SELECT max(i) + 1 FROM t ON CONFLICT (i) DO UPDATE SET i=EXCLUDED.i; +} +step s4_insert_commit +{ + COMMIT; +} +teardown +{ + SELECT injection_points_detach('insert-speculative-before-confirm'); +} + +session s5 +step s5_wakeup_snapbuild +{ + SELECT injection_points_wakeup('snapbuild-full'); +} +step s5_wakeup_insert_speculative +{ + SELECT injection_points_wakeup('insert-speculative-before-confirm'); +} +step s5_wakeup_repack +{ + SELECT injection_points_wakeup('repack-concurrently-before-lock'); +} + +permutation +# Bring the snapshot builder to the FULL_SNAPSHOT state. +s1_assign_xid +s3_repack +s2_assign_xid +s1_rollback +# Perform the speculative insert, but no confirmation so far. The snapshot +# builder should decode it. +s4_insert +# Let the snapshout builder achieve CONSISTENT state and finish the setup. +s5_wakeup_snapbuild +s2_rollback +# While REPACK is waiting on repack-concurrently-before-lock, let the insert +# get confirmed. Relation filtering is now enabled. +s5_wakeup_insert_speculative +s4_insert_commit +# REPACK should now decode the speculative insert and decode the speculative +# insert (with the confirmation record filtered out). +s5_wakeup_repack diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index 680c29f35d5..6d5482e5746 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -1232,6 +1232,8 @@ ExecInsert(ModifyTableContext *context, slot, arbiterIndexes, &specConflict); + INJECTION_POINT("insert-speculative-before-confirm", NULL); + /* adjust the tuple's state accordingly */ table_tuple_complete_speculative(resultRelationDesc, slot, specToken, !specConflict); diff --git a/src/backend/replication/logical/snapbuild.c b/src/backend/replication/logical/snapbuild.c index fbdd4600a2b..883e5b6e18f 100644 --- a/src/backend/replication/logical/snapbuild.c +++ b/src/backend/replication/logical/snapbuild.c @@ -141,6 +141,7 @@ #include "storage/procarray.h" #include "storage/standby.h" #include "utils/builtins.h" +#include "utils/injection_point.h" #include "utils/memutils.h" #include "utils/snapmgr.h" #include "utils/snapshot.h" @@ -1390,6 +1391,8 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn builder->state = SNAPBUILD_FULL_SNAPSHOT; builder->next_phase_at = running->nextXid; + INJECTION_POINT("snapbuild-full", NULL); + ereport(LOG, errmsg("logical decoding found initial consistent point at %X/%08X", LSN_FORMAT_ARGS(lsn)), diff --git a/src/test/isolation/isolationtester.c b/src/test/isolation/isolationtester.c index 440c875b8ac..8f17ee412c9 100644 --- a/src/test/isolation/isolationtester.c +++ b/src/test/isolation/isolationtester.c @@ -216,15 +216,22 @@ main(int argc, char **argv) * exactly expect concurrent use of test tables. However, autovacuum will * occasionally take AccessExclusiveLock to truncate a table, and we must * ignore that transient wait. + * + * If the session's backend is blocked, and if its background worker is + * waiting on an injection point, we assume that the injection point is + * the reason for the backend to be blocked. That's what we check in the + * second query of the UNION. XXX Should we use a separate query for that? */ initPQExpBuffer(&wait_query); appendPQExpBufferStr(&wait_query, + "WITH blocking(res) AS (" "SELECT pg_catalog.pg_isolation_test_session_is_blocked($1, '{"); /* The spec syntax requires at least one session; assume that here. */ appendPQExpBufferStr(&wait_query, conns[1].backend_pid_str); for (i = 2; i < nconns; i++) appendPQExpBuffer(&wait_query, ",%s", conns[i].backend_pid_str); - appendPQExpBufferStr(&wait_query, "}')"); + appendPQExpBufferStr(&wait_query, "}') UNION " + "SELECT pg_catalog.pg_isolation_test_session_is_blocked(pid, '{}') FROM pg_stat_activity WHERE leader_pid=$1) SELECT bool_or(res) FROM blocking"); res = PQprepare(conns[0].conn, PREP_WAITING, wait_query.data, 0, NULL); if (PQresultStatus(res) != PGRES_COMMAND_OK) -- 2.47.3 --=-=-=-- ^ permalink raw reply [nested|flat] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ 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; 201+ 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] 201+ messages in thread
end of thread, other threads:[~2026-07-08 21:39 UTC | newest] Thread overview: 201+ messages (download: mbox mbox.gz follow: Atom feed) -- links below jump to the message on this page -- 2026-03-23 11:50 [PATCH] Reproduce filtering issue. Antonin Houska <[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]> 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