agora inbox for [email protected]
help / color / mirror / Atom feed[PATCH v48 3/7] Rename cluster.c/h -> repack.c/h
205+ messages / 2 participants
[nested] [flat]
* [PATCH v48 3/7] Rename cluster.c/h -> repack.c/h
@ 2026-03-31 16:55 Álvaro Herrera <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Álvaro Herrera @ 2026-03-31 16:55 UTC (permalink / raw)
---
src/backend/commands/Makefile | 2 +-
src/backend/commands/matview.c | 2 +-
src/backend/commands/meson.build | 2 +-
src/backend/commands/{cluster.c => repack.c} | 6 +++---
src/backend/commands/tablecmds.c | 2 +-
src/backend/commands/vacuum.c | 6 +++---
src/backend/storage/ipc/procsignal.c | 1 +
src/backend/tcop/postgres.c | 1 +
src/backend/tcop/utility.c | 2 +-
src/include/commands/{cluster.h => repack.h} | 12 ++++++------
10 files changed, 19 insertions(+), 17 deletions(-)
rename src/backend/commands/{cluster.c => repack.c} (99%)
rename src/include/commands/{cluster.h => repack.h} (90%)
diff --git a/src/backend/commands/Makefile b/src/backend/commands/Makefile
index c10fdba2bbb..fe1bba3a9b9 100644
--- a/src/backend/commands/Makefile
+++ b/src/backend/commands/Makefile
@@ -18,7 +18,6 @@ OBJS = \
amcmds.o \
analyze.o \
async.o \
- cluster.o \
collationcmds.o \
comment.o \
constraint.o \
@@ -51,6 +50,7 @@ OBJS = \
proclang.o \
propgraphcmds.o \
publicationcmds.o \
+ repack.o \
schemacmds.o \
seclabel.o \
sequence.o \
diff --git a/src/backend/commands/matview.c b/src/backend/commands/matview.c
index 81a55a33ef2..d492bddcd73 100644
--- a/src/backend/commands/matview.c
+++ b/src/backend/commands/matview.c
@@ -24,8 +24,8 @@
#include "catalog/namespace.h"
#include "catalog/pg_am.h"
#include "catalog/pg_opclass.h"
-#include "commands/cluster.h"
#include "commands/matview.h"
+#include "commands/repack.h"
#include "commands/tablecmds.h"
#include "commands/tablespace.h"
#include "executor/executor.h"
diff --git a/src/backend/commands/meson.build b/src/backend/commands/meson.build
index 90c7e37a429..f624aae74af 100644
--- a/src/backend/commands/meson.build
+++ b/src/backend/commands/meson.build
@@ -6,7 +6,6 @@ backend_sources += files(
'amcmds.c',
'analyze.c',
'async.c',
- 'cluster.c',
'collationcmds.c',
'comment.c',
'constraint.c',
@@ -39,6 +38,7 @@ backend_sources += files(
'proclang.c',
'propgraphcmds.c',
'publicationcmds.c',
+ 'repack.c',
'schemacmds.c',
'seclabel.c',
'sequence.c',
diff --git a/src/backend/commands/cluster.c b/src/backend/commands/repack.c
similarity index 99%
rename from src/backend/commands/cluster.c
rename to src/backend/commands/repack.c
index f241e18b153..20f0a572236 100644
--- a/src/backend/commands/cluster.c
+++ b/src/backend/commands/repack.c
@@ -1,6 +1,6 @@
/*-------------------------------------------------------------------------
*
- * cluster.c
+ * repack.c
* REPACK a table; formerly known as CLUSTER. VACUUM FULL also uses
* parts of this code.
*
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
- * src/backend/commands/cluster.c
+ * src/backend/commands/repack.c
*
*-------------------------------------------------------------------------
*/
@@ -33,9 +33,9 @@
#include "catalog/pg_am.h"
#include "catalog/pg_inherits.h"
#include "catalog/toasting.h"
-#include "commands/cluster.h"
#include "commands/defrem.h"
#include "commands/progress.h"
+#include "commands/repack.h"
#include "commands/tablecmds.h"
#include "commands/vacuum.h"
#include "miscadmin.h"
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 8b4ebc6f226..505473ed852 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -57,10 +57,10 @@
#include "catalog/storage.h"
#include "catalog/storage_xlog.h"
#include "catalog/toasting.h"
-#include "commands/cluster.h"
#include "commands/comment.h"
#include "commands/defrem.h"
#include "commands/event_trigger.h"
+#include "commands/repack.h"
#include "commands/sequence.h"
#include "commands/tablecmds.h"
#include "commands/tablespace.h"
diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c
index 0ed363d1c85..b179b62b5c8 100644
--- a/src/backend/commands/vacuum.c
+++ b/src/backend/commands/vacuum.c
@@ -9,7 +9,7 @@
*
* VACUUM for heap AM is implemented in vacuumlazy.c, parallel vacuum in
* vacuumparallel.c, ANALYZE in analyze.c, and VACUUM FULL is a variant of
- * CLUSTER, handled in cluster.c.
+ * REPACK, handled in repack.c.
*
*
* Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
@@ -38,9 +38,9 @@
#include "catalog/pg_database.h"
#include "catalog/pg_inherits.h"
#include "commands/async.h"
-#include "commands/cluster.h"
#include "commands/defrem.h"
#include "commands/progress.h"
+#include "commands/repack.h"
#include "commands/vacuum.h"
#include "miscadmin.h"
#include "nodes/makefuncs.h"
@@ -2293,7 +2293,7 @@ vacuum_rel(Oid relid, RangeVar *relation, VacuumParams params,
if ((params.options & VACOPT_VERBOSE) != 0)
cluster_params.options |= CLUOPT_VERBOSE;
- /* VACUUM FULL is a variant of REPACK; see cluster.c */
+ /* VACUUM FULL is a variant of REPACK; see repack.c */
cluster_rel(REPACK_COMMAND_VACUUMFULL, rel, InvalidOid,
&cluster_params);
/* cluster_rel closes the relation, but keeps lock */
diff --git a/src/backend/storage/ipc/procsignal.c b/src/backend/storage/ipc/procsignal.c
index 7e017c8d53b..7cef6e43661 100644
--- a/src/backend/storage/ipc/procsignal.c
+++ b/src/backend/storage/ipc/procsignal.c
@@ -19,6 +19,7 @@
#include "access/parallel.h"
#include "commands/async.h"
+#include "commands/repack.h"
#include "miscadmin.h"
#include "pgstat.h"
#include "port/pg_bitutils.h"
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index 10be60011ad..9fbaa5c00f0 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -39,6 +39,7 @@
#include "commands/event_trigger.h"
#include "commands/explain_state.h"
#include "commands/prepare.h"
+#include "commands/repack.h"
#include "common/pg_prng.h"
#include "jit/jit.h"
#include "libpq/libpq.h"
diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index 2b609bfc824..5f8c766c4be 100644
--- a/src/backend/tcop/utility.c
+++ b/src/backend/tcop/utility.c
@@ -26,7 +26,6 @@
#include "catalog/toasting.h"
#include "commands/alter.h"
#include "commands/async.h"
-#include "commands/cluster.h"
#include "commands/collationcmds.h"
#include "commands/comment.h"
#include "commands/conversioncmds.h"
@@ -46,6 +45,7 @@
#include "commands/proclang.h"
#include "commands/propgraphcmds.h"
#include "commands/publicationcmds.h"
+#include "commands/repack.h"
#include "commands/schemacmds.h"
#include "commands/seclabel.h"
#include "commands/sequence.h"
diff --git a/src/include/commands/cluster.h b/src/include/commands/repack.h
similarity index 90%
rename from src/include/commands/cluster.h
rename to src/include/commands/repack.h
index d6b62c747e8..85061158b0c 100644
--- a/src/include/commands/cluster.h
+++ b/src/include/commands/repack.h
@@ -1,17 +1,17 @@
/*-------------------------------------------------------------------------
*
- * cluster.h
- * header file for postgres cluster command stuff
+ * repack.h
+ * header file for the REPACK command
*
* Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
* Portions Copyright (c) 1994-5, Regents of the University of California
*
- * src/include/commands/cluster.h
+ * src/include/commands/repack.h
*
*-------------------------------------------------------------------------
*/
-#ifndef CLUSTER_H
-#define CLUSTER_H
+#ifndef REPACK_H
+#define REPACK_H
#include "nodes/parsenodes.h"
#include "parser/parse_node.h"
@@ -52,4 +52,4 @@ extern void finish_heap_swap(Oid OIDOldHeap, Oid OIDNewHeap,
MultiXactId cutoffMulti,
char newrelpersistence);
-#endif /* CLUSTER_H */
+#endif /* REPACK_H */
--
2.47.3
--qfkt2ktdpcfeypib
Content-Type: text/x-diff; charset=utf-8
Content-Disposition: attachment;
filename="v48-0004-Add-CONCURRENTLY-option-to-REPACK-command.patch"
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump
@ 2026-07-08 21:39 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 205+ messages in thread
From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw)
---
.../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +-----------------
1 file changed, 5 insertions(+), 202 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 878fcc16a9e..04844298ab3 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -199,15 +199,10 @@ sub adjust_database_contents
'drop operator if exists #@%# (bigint,NONE)');
# get rid of dblink's dependencies on regress.so
- my $regrdb =
- $old_version le '9.4'
- ? 'contrib_regression'
- : 'contrib_regression_dblink';
-
- if ($dbnames{$regrdb})
+ if ($dbnames{'contrib_regression_dblink'})
{
_add_st(
- $result, $regrdb,
+ $result, 'contrib_regression_dblink',
'drop function if exists public.putenv(text)',
'drop function if exists public.wait_pid(integer)');
}
@@ -250,7 +245,7 @@ sub adjust_database_contents
}
# this table had OIDs too, but we'll just drop it
- if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'})
+ if ($dbnames{'contrib_regression_postgres_fdw'})
{
_add_st(
$result,
@@ -276,43 +271,13 @@ sub adjust_database_contents
'drop function if exists public.funny_dup17()');
}
- # version-0 C functions are no longer supported
- if ($old_version < 10)
- {
- _add_st($result, 'regression',
- 'drop function oldstyle_length(integer, text)');
- }
-
- if ($old_version lt '9.5')
- {
- # cope with changes of underlying functions
- _add_st(
- $result,
- 'regression',
- 'drop operator @#@ (NONE, bigint)',
- 'CREATE OPERATOR @#@ ('
- . 'PROCEDURE = factorial, RIGHTARG = bigint )',
- 'drop aggregate public.array_cat_accum(anyarray)',
- 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( '
- . ' sfunc = array_larger, '
- . ' stype = anyarray, '
- . ' initcond = $${}$$ ' . ' ) ');
-
- # "=>" is no longer valid as an operator name
- _add_st($result, 'regression',
- 'drop operator if exists public.=> (bigint, NONE)');
- }
-
# Version 19 changed the output format of pg_lsn. To avoid output
# differences, set all pg_lsn columns to NULL if the old version is
# older than 19.
if ($old_version < 19)
{
- if ($old_version >= '9.5')
- {
- _add_st($result, 'regression',
- "update brintest set lsncol = NULL");
- }
+ _add_st($result, 'regression',
+ "update brintest set lsncol = NULL");
if ($old_version >= 12)
{
@@ -426,107 +391,6 @@ sub adjust_old_dumpfile
/$1 EXECUTE FUNCTION/mgx;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- if ($old_version lt '9.6')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix =
- "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t";
- my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'";
- my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
-
- $prefix =
- "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t";
- $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'";
- $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'";
- $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg;
- }
-
- if ($old_version lt '9.5')
- {
- # adjust some places where we don't print so many parens anymore
-
- my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]";
- my $orig = "((x > 3) AND (y <> 'check failed'::text))";
- my $repl = "(x > 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $prefix = "CONSTRAINT insert_con CHECK [(][(]";
- $orig = "((x >= 3) AND (y <> 'check failed'::text))";
- $repl = "(x >= 3) AND (y <> 'check failed'::text)";
- $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg;
-
- $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))";
- $repl =
- "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))";
- $dump =~ s/\Q$orig\E/$repl/mg;
-
- my $expr =
- "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
-
- $expr =
- "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)";
- $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
-
- # _mash_view_whitespace doesn't handle multi-command rules;
- # rather than trying to fix that, just hack the exceptions manually.
-
- my $prefix =
- "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);";
- my $line2 = " DELETE FROM public.rtest_admin";
- my $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- $prefix =
- "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);";
- $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname";
- $line3 = " WHERE (rtest_admin.sysname = old.sysname);";
- $dump =~
- s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg;
-
- # and there's one place where pre-9.3 uses a different table alias
- $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s
- ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s
- WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s
- (WHERE\s\(\(rule_and_refint_t3)
- (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3)
- (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)}
- {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx;
-
- # Also fix old use of NATURAL JOIN syntax
- $dump =~ s {NATURAL JOIN public\.credit_card r}
- {JOIN public.credit_card r USING (cid)}mg;
- $dump =~ s {NATURAL JOIN public\.credit_usage r}
- {JOIN public.credit_usage r USING (cid)}mg;
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
@@ -661,37 +525,6 @@ sub _mash_view_qualifiers
return $dump;
}
-
-# Internal subroutine to mangle whitespace within view/rule commands.
-# Any consecutive sequence of whitespace is reduced to one space.
-sub _mash_view_whitespace
-{
- my ($dump) = @_;
-
- foreach my $leader ('CREATE VIEW', 'CREATE RULE')
- {
- my @splitchunks = split $leader, $dump;
-
- $dump = shift(@splitchunks);
- foreach my $chunk (@splitchunks)
- {
- my @thischunks = split /;/, $chunk, 2;
- my $stmt = shift(@thischunks);
-
- # now $stmt is just the body of the CREATE VIEW/RULE
- $stmt =~ s/\s+/ /sg;
- # we also need to smash these forms for sub-selects and rules
- $stmt =~ s/\( SELECT/(SELECT/g;
- $stmt =~ s/\( INSERT/(INSERT/g;
- $stmt =~ s/\( UPDATE/(UPDATE/g;
- $stmt =~ s/\( DELETE/(DELETE/g;
-
- $dump .= $leader . $stmt . ';' . $thischunks[0];
- }
- }
- return $dump;
-}
-
=pod
=item adjust_new_dumpfile($old_version, $dump)
@@ -779,36 +612,6 @@ sub adjust_new_dumpfile
$dump =~ s/^SET default_table_access_method = heap;\n//mg;
}
- # During pg_upgrade, we reindex hash indexes if the source is pre-v10.
- # This may change their tables' relallvisible values, so don't compare
- # those.
- if ($old_version < 10)
- {
- $dump =~ s/
- (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\(
- [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass,
- [^;]*'relallvisible',)\s'\d+'::integer
- /$1 ''::integer/mgx;
- }
-
- # dumps from pre-9.6 dblink may include redundant ACL settings
- if ($old_version lt '9.6')
- {
- my $comment =
- "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*";
- my $sql =
- "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;";
- $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg;
- }
-
- if ($old_version lt '9.3')
- {
- # CREATE VIEW/RULE statements were not pretty-printed before 9.3.
- # To cope, reduce all whitespace sequences within them to one space.
- # This must be done on both old and new dumps.
- $dump = _mash_view_whitespace($dump);
- }
-
# Suppress blank lines, as some places in pg_dump emit more or fewer.
$dump =~ s/\n\n+/\n/g;
--
2.50.1 (Apple Git-155)
--WhtY6+QncUkBAPlR--
^ permalink raw reply [nested|flat] 205+ messages in thread
end of thread, other threads:[~2026-07-08 21:39 UTC | newest]
Thread overview: 205+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2026-03-31 16:55 [PATCH v48 3/7] Rename cluster.c/h -> repack.c/h Álvaro Herrera <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]>
2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email 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