agora inbox for [email protected]help / color / mirror / Atom feed
[PATCH v4 1/3] remove PQfn 277+ messages / 1 participants [nested] [flat]
* [PATCH v4 1/3] remove PQfn @ 2026-06-01 21:55 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-06-01 21:55 UTC (permalink / raw) --- .../appendix-obsolete-libpq-fastpath.sgml | 24 ++++ doc/src/sgml/appendix-obsolete.sgml | 1 + doc/src/sgml/filelist.sgml | 1 + doc/src/sgml/libpq.sgml | 117 +----------------- src/backend/tcop/fastpath.c | 4 +- src/include/tcop/dest.h | 4 +- src/interfaces/libpq/fe-exec.c | 42 +++++-- src/interfaces/libpq/fe-lobj.c | 38 +++--- 8 files changed, 86 insertions(+), 145 deletions(-) create mode 100644 doc/src/sgml/appendix-obsolete-libpq-fastpath.sgml diff --git a/doc/src/sgml/appendix-obsolete-libpq-fastpath.sgml b/doc/src/sgml/appendix-obsolete-libpq-fastpath.sgml new file mode 100644 index 00000000000..e42c2ece487 --- /dev/null +++ b/doc/src/sgml/appendix-obsolete-libpq-fastpath.sgml @@ -0,0 +1,24 @@ +<!-- doc/src/sgml/appendix-obsolete-libpq-fastpath.sgml --> +<!-- + See doc/src/sgml/appendix-obsolete.sgml for why this file exists. Do not change the id attribute. +--> + +<sect1 id="libpq-fastpath"> + <title><application>libpq</application> Fast-Path Interface Removed</title> + + <indexterm zone="libpq-fastpath"> + <primary>fast path</primary> + </indexterm> + + <para> + In <productname>PostgreSQL</productname> 19 and below, + <application>libpq</application> supported a fast-path interface to send + simple function calls to the server. This interface was unsafe and + obsolete, and thus was removed in <productname>PostgreSQL</productname> 20. + One can achieve similar performance and greater functionality by setting up + a prepared statement to define the function call. Then, executing the + statement with binary transmission of parameters and results substitutes + for a fast-path function call. + </para> + +</sect1> diff --git a/doc/src/sgml/appendix-obsolete.sgml b/doc/src/sgml/appendix-obsolete.sgml index cc002653052..11a033112ef 100644 --- a/doc/src/sgml/appendix-obsolete.sgml +++ b/doc/src/sgml/appendix-obsolete.sgml @@ -39,5 +39,6 @@ &obsolete-pgresetxlog; &obsolete-pgreceivexlog; &obsolete-auth-radius; + &obsolete-libpq-fastpath; </appendix> diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml index 25a85082759..7dbe741d729 100644 --- a/doc/src/sgml/filelist.sgml +++ b/doc/src/sgml/filelist.sgml @@ -209,3 +209,4 @@ <!ENTITY obsolete-pgresetxlog SYSTEM "appendix-obsolete-pgresetxlog.sgml"> <!ENTITY obsolete-pgreceivexlog SYSTEM "appendix-obsolete-pgreceivexlog.sgml"> <!ENTITY obsolete-auth-radius SYSTEM "appendix-obsolete-auth-radius.sgml"> +<!ENTITY obsolete-libpq-fastpath SYSTEM "appendix-obsolete-libpq-fastpath.sgml"> diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index 7d3c3bb66d8..123e7f03902 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -5887,7 +5887,7 @@ int PQflush(PGconn *conn); are permitted, command strings containing multiple SQL commands are disallowed, and so is <literal>COPY</literal>. Using synchronous command execution functions - such as <function>PQfn</function>, + such as <function>PQexec</function>, <function>PQexecParams</function>, <function>PQprepare</function>, @@ -7046,121 +7046,6 @@ int PQrequestCancel(PGconn *conn); </sect2> </sect1> - <sect1 id="libpq-fastpath"> - <title>The Fast-Path Interface</title> - - <indexterm zone="libpq-fastpath"> - <primary>fast path</primary> - </indexterm> - - <para> - <productname>PostgreSQL</productname> provides a fast-path interface - to send simple function calls to the server. - </para> - - <warning> - <para> - This interface is unsafe and should not be used. When - <parameter>result_is_int</parameter> is set to <literal>0</literal>, - <function>PQfn</function> may write data beyond the end of - <parameter>result_buf</parameter>, regardless of whether the buffer has - enough space for the requested number of bytes. Furthermore, it is - obsolete, as one can achieve similar - performance and greater functionality by setting up a prepared - statement to define the function call. Then, executing the statement - with binary transmission of parameters and results substitutes for a - fast-path function call. - </para> - </warning> - - <para> - The function <function id="libpq-PQfn">PQfn</function><indexterm><primary>PQfn</primary></indexterm> - requests execution of a server function via the fast-path interface: -<synopsis> -PGresult *PQfn(PGconn *conn, - int fnid, - int *result_buf, - int *result_len, - int result_is_int, - const PQArgBlock *args, - int nargs); - -typedef struct -{ - int len; - int isint; - union - { - int *ptr; - int integer; - } u; -} PQArgBlock; -</synopsis> - </para> - - <para> - The <parameter>fnid</parameter> argument is the OID of the function to be - executed. <parameter>args</parameter> and <parameter>nargs</parameter> define the - parameters to be passed to the function; they must match the declared - function argument list. When the <parameter>isint</parameter> field of a - parameter structure is true, the <parameter>u.integer</parameter> value is sent - to the server as an integer of the indicated length (this must be - 2 or 4 bytes); proper byte-swapping occurs. When <parameter>isint</parameter> - is false, the indicated number of bytes at <parameter>*u.ptr</parameter> are - sent with no processing; the data must be in the format expected by - the server for binary transmission of the function's argument data - type. (The declaration of <parameter>u.ptr</parameter> as being of - type <type>int *</type> is historical; it would be better to consider - it <type>void *</type>.) - <parameter>result_buf</parameter> points to the buffer in which to place - the function's return value. The caller must have allocated sufficient - space to store the return value. (There is no check!) The actual result - length in bytes will be returned in the integer pointed to by - <parameter>result_len</parameter>. If a 2- or 4-byte integer result - is expected, set <parameter>result_is_int</parameter> to 1, otherwise - set it to 0. Setting <parameter>result_is_int</parameter> to 1 causes - <application>libpq</application> to byte-swap the value if necessary, so that it - is delivered as a proper <type>int</type> value for the client machine; - note that a 4-byte integer is delivered into <parameter>*result_buf</parameter> - for either allowed result size. - When <parameter>result_is_int</parameter> is 0, the binary-format byte string - sent by the server is returned unmodified. (In this case it's better - to consider <parameter>result_buf</parameter> as being of - type <type>void *</type>.) - </para> - - <para> - <function>PQfn</function> always returns a valid - <structname>PGresult</structname> pointer, with - status <literal>PGRES_COMMAND_OK</literal> for success - or <literal>PGRES_FATAL_ERROR</literal> if some problem was encountered. - The result status should be - checked before the result is used. The caller is responsible for - freeing the <structname>PGresult</structname> with - <xref linkend="libpq-PQclear"/> when it is no longer needed. - </para> - - <para> - To pass a NULL argument to the function, set - the <parameter>len</parameter> field of that parameter structure - to <literal>-1</literal>; the <parameter>isint</parameter> - and <parameter>u</parameter> fields are then irrelevant. - </para> - - <para> - If the function returns NULL, <parameter>*result_len</parameter> is set - to <literal>-1</literal>, and <parameter>*result_buf</parameter> is not - modified. - </para> - - <para> - Note that it is not possible to handle set-valued results when using - this interface. Also, the function must be a plain function, not an - aggregate, window function, or procedure. - </para> - - </sect1> - <sect1 id="libpq-notify"> <title>Asynchronous Notification</title> diff --git a/src/backend/tcop/fastpath.c b/src/backend/tcop/fastpath.c index 52772bc90a8..5379e4ad9f5 100644 --- a/src/backend/tcop/fastpath.c +++ b/src/backend/tcop/fastpath.c @@ -11,7 +11,9 @@ * src/backend/tcop/fastpath.c * * NOTES - * This cruft is the server side of PQfn. + * This cruft is the server side of PQfn. libpq's PQfn() was retired in + * v20 and now always errors, but the server code is retained for the + * benefit of older clients. * *------------------------------------------------------------------------- */ diff --git a/src/include/tcop/dest.h b/src/include/tcop/dest.h index 103f27fc3cb..507414421ec 100644 --- a/src/include/tcop/dest.h +++ b/src/include/tcop/dest.h @@ -12,8 +12,8 @@ * * - a remote process is the destination when we are * running a backend with a frontend and the frontend executes - * PQexec() or PQfn(). In this case, the results are sent - * to the frontend via the functions in backend/libpq. + * PQexec(). In this case, the results are sent to the frontend via + * the functions in backend/libpq. * * - DestNone is the destination when the system executes * a query internally. The results are discarded. diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c index 7b8edacbfde..2f034d70e65 100644 --- a/src/interfaces/libpq/fe-exec.c +++ b/src/interfaces/libpq/fe-exec.c @@ -2986,10 +2986,10 @@ PQendcopy(PGconn *conn) * nargs : # of arguments in args array. * * RETURNS - * PGresult with status = PGRES_COMMAND_OK if successful. - * *result_len is > 0 if there is a return value, 0 if not. - * PGresult with status = PGRES_FATAL_ERROR if backend returns an error. - * NULL on communications failure. conn->errorMessage will be set. + * This function was unsafe and is no longer supported, so it now always + * sets *result_len to 0 and returns a PGresult with status set to + * PGRES_FATAL_ERROR (unless the connection is in the wrong state, in + * which case it returns NULL). * ---------------- */ @@ -3002,15 +3002,43 @@ PQfn(PGconn *conn, const PQArgBlock *args, int nargs) { - return PQnfn(conn, fnid, result_buf, -1, result_len, - result_is_int, args, nargs); + *result_len = 0; + + if (!conn) + return NULL; + + /* + * Since this is the beginning of a query cycle, reset the error state. + * However, in pipeline mode with something already queued, the error + * buffer belongs to that command and we shouldn't clear it. + */ + if (conn->cmd_queue_head == NULL) + pqClearConnErrorState(conn); + + if (conn->pipelineStatus != PQ_PIPELINE_OFF) + { + libpq_append_conn_error(conn, "%s not allowed in pipeline mode", "PQfn"); + return NULL; + } + + if (conn->sock == PGINVALID_SOCKET || conn->asyncStatus != PGASYNC_IDLE || + pgHavePendingResult(conn)) + { + libpq_append_conn_error(conn, "connection in wrong state"); + return NULL; + } + + libpq_append_conn_error(conn, "PQfn() is no longer supported; use a prepared statement or PQexecParams() with binary results instead"); + pqSaveErrorResult(conn); + return pqPrepareAsyncResult(conn); } /* * PQnfn * Private version of PQfn() with verification that returned data fits in * result_buf when result_is_int == 0. Setting buf_size to -1 disables - * this verification. + * this verification. This is currently only used by the frontend LO + * interface and will hopefully be removed down the road. */ PGresult * PQnfn(PGconn *conn, int fnid, int *result_buf, int buf_size, int *result_len, diff --git a/src/interfaces/libpq/fe-lobj.c b/src/interfaces/libpq/fe-lobj.c index 12a32fcbaf3..1660c969f58 100644 --- a/src/interfaces/libpq/fe-lobj.c +++ b/src/interfaces/libpq/fe-lobj.c @@ -72,7 +72,7 @@ lo_open(PGconn *conn, Oid lobjId, int mode) argv[1].len = 4; argv[1].u.integer = mode; - res = PQfn(conn, conn->lobjfuncs->fn_lo_open, &fd, &result_len, 1, argv, 2); + res = PQnfn(conn, conn->lobjfuncs->fn_lo_open, &fd, -1, &result_len, 1, argv, 2); if (PQresultStatus(res) == PGRES_COMMAND_OK) { PQclear(res); @@ -106,8 +106,8 @@ lo_close(PGconn *conn, int fd) argv[0].isint = 1; argv[0].len = 4; argv[0].u.integer = fd; - res = PQfn(conn, conn->lobjfuncs->fn_lo_close, - &retval, &result_len, 1, argv, 1); + res = PQnfn(conn, conn->lobjfuncs->fn_lo_close, + &retval, -1, &result_len, 1, argv, 1); if (PQresultStatus(res) == PGRES_COMMAND_OK) { PQclear(res); @@ -169,8 +169,8 @@ lo_truncate(PGconn *conn, int fd, size_t len) argv[1].len = 4; argv[1].u.integer = (int) len; - res = PQfn(conn, conn->lobjfuncs->fn_lo_truncate, - &retval, &result_len, 1, argv, 2); + res = PQnfn(conn, conn->lobjfuncs->fn_lo_truncate, + &retval, -1, &result_len, 1, argv, 2); if (PQresultStatus(res) == PGRES_COMMAND_OK) { @@ -218,8 +218,8 @@ lo_truncate64(PGconn *conn, int fd, int64_t len) argv[1].len = 8; argv[1].u.ptr = (int *) &len; - res = PQfn(conn, conn->lobjfuncs->fn_lo_truncate64, - &retval, &result_len, 1, argv, 2); + res = PQnfn(conn, conn->lobjfuncs->fn_lo_truncate64, + &retval, -1, &result_len, 1, argv, 2); if (PQresultStatus(res) == PGRES_COMMAND_OK) { @@ -322,8 +322,8 @@ lo_write(PGconn *conn, int fd, const char *buf, size_t len) argv[1].len = (int) len; argv[1].u.ptr = (int *) unconstify(char *, buf); - res = PQfn(conn, conn->lobjfuncs->fn_lo_write, - &retval, &result_len, 1, argv, 2); + res = PQnfn(conn, conn->lobjfuncs->fn_lo_write, + &retval, -1, &result_len, 1, argv, 2); if (PQresultStatus(res) == PGRES_COMMAND_OK) { PQclear(res); @@ -363,8 +363,8 @@ lo_lseek(PGconn *conn, int fd, int offset, int whence) argv[2].len = 4; argv[2].u.integer = whence; - res = PQfn(conn, conn->lobjfuncs->fn_lo_lseek, - &retval, &result_len, 1, argv, 3); + res = PQnfn(conn, conn->lobjfuncs->fn_lo_lseek, + &retval, -1, &result_len, 1, argv, 3); if (PQresultStatus(res) == PGRES_COMMAND_OK) { PQclear(res); @@ -448,8 +448,8 @@ lo_creat(PGconn *conn, int mode) argv[0].isint = 1; argv[0].len = 4; argv[0].u.integer = mode; - res = PQfn(conn, conn->lobjfuncs->fn_lo_creat, - &retval, &result_len, 1, argv, 1); + res = PQnfn(conn, conn->lobjfuncs->fn_lo_creat, + &retval, -1, &result_len, 1, argv, 1); if (PQresultStatus(res) == PGRES_COMMAND_OK) { PQclear(res); @@ -492,8 +492,8 @@ lo_create(PGconn *conn, Oid lobjId) argv[0].isint = 1; argv[0].len = 4; argv[0].u.integer = lobjId; - res = PQfn(conn, conn->lobjfuncs->fn_lo_create, - &retval, &result_len, 1, argv, 1); + res = PQnfn(conn, conn->lobjfuncs->fn_lo_create, + &retval, -1, &result_len, 1, argv, 1); if (PQresultStatus(res) == PGRES_COMMAND_OK) { PQclear(res); @@ -526,8 +526,8 @@ lo_tell(PGconn *conn, int fd) argv[0].len = 4; argv[0].u.integer = fd; - res = PQfn(conn, conn->lobjfuncs->fn_lo_tell, - &retval, &result_len, 1, argv, 1); + res = PQnfn(conn, conn->lobjfuncs->fn_lo_tell, + &retval, -1, &result_len, 1, argv, 1); if (PQresultStatus(res) == PGRES_COMMAND_OK) { PQclear(res); @@ -600,8 +600,8 @@ lo_unlink(PGconn *conn, Oid lobjId) argv[0].len = 4; argv[0].u.integer = lobjId; - res = PQfn(conn, conn->lobjfuncs->fn_lo_unlink, - &retval, &result_len, 1, argv, 1); + res = PQnfn(conn, conn->lobjfuncs->fn_lo_unlink, + &retval, -1, &result_len, 1, argv, 1); if (PQresultStatus(res) == PGRES_COMMAND_OK) { PQclear(res); -- 2.50.1 (Apple Git-155) --Z10p9YYojB0/BzD2 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=v4-0002-remove-lo_hton64-and-lo_ntoh64.patch ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
* [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump @ 2026-07-08 21:39 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 277+ messages in thread From: Nathan Bossart @ 2026-07-08 21:39 UTC (permalink / raw) --- .../perl/PostgreSQL/Test/AdjustUpgrade.pm | 207 +----------------- 1 file changed, 5 insertions(+), 202 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm index 878fcc16a9e..04844298ab3 100644 --- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm +++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm @@ -199,15 +199,10 @@ sub adjust_database_contents 'drop operator if exists #@%# (bigint,NONE)'); # get rid of dblink's dependencies on regress.so - my $regrdb = - $old_version le '9.4' - ? 'contrib_regression' - : 'contrib_regression_dblink'; - - if ($dbnames{$regrdb}) + if ($dbnames{'contrib_regression_dblink'}) { _add_st( - $result, $regrdb, + $result, 'contrib_regression_dblink', 'drop function if exists public.putenv(text)', 'drop function if exists public.wait_pid(integer)'); } @@ -250,7 +245,7 @@ sub adjust_database_contents } # this table had OIDs too, but we'll just drop it - if ($old_version >= 10 && $dbnames{'contrib_regression_postgres_fdw'}) + if ($dbnames{'contrib_regression_postgres_fdw'}) { _add_st( $result, @@ -276,43 +271,13 @@ sub adjust_database_contents 'drop function if exists public.funny_dup17()'); } - # version-0 C functions are no longer supported - if ($old_version < 10) - { - _add_st($result, 'regression', - 'drop function oldstyle_length(integer, text)'); - } - - if ($old_version lt '9.5') - { - # cope with changes of underlying functions - _add_st( - $result, - 'regression', - 'drop operator @#@ (NONE, bigint)', - 'CREATE OPERATOR @#@ (' - . 'PROCEDURE = factorial, RIGHTARG = bigint )', - 'drop aggregate public.array_cat_accum(anyarray)', - 'CREATE AGGREGATE array_larger_accum (anyarray) ' . ' ( ' - . ' sfunc = array_larger, ' - . ' stype = anyarray, ' - . ' initcond = $${}$$ ' . ' ) '); - - # "=>" is no longer valid as an operator name - _add_st($result, 'regression', - 'drop operator if exists public.=> (bigint, NONE)'); - } - # Version 19 changed the output format of pg_lsn. To avoid output # differences, set all pg_lsn columns to NULL if the old version is # older than 19. if ($old_version < 19) { - if ($old_version >= '9.5') - { - _add_st($result, 'regression', - "update brintest set lsncol = NULL"); - } + _add_st($result, 'regression', + "update brintest set lsncol = NULL"); if ($old_version >= 12) { @@ -426,107 +391,6 @@ sub adjust_old_dumpfile /$1 EXECUTE FUNCTION/mgx; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - if ($old_version lt '9.6') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = - "'New York'\tnew & york | big & apple | nyc\t'new' & 'york'\t"; - my $orig = "( 'new' & 'york' | 'big' & 'appl' ) | 'nyc'"; - my $repl = "'new' & 'york' | 'big' & 'appl' | 'nyc'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - - $prefix = - "'Sanct Peter'\tPeterburg | peter | 'Sanct Peterburg'\t'sanct' & 'peter'\t"; - $orig = "( 'peterburg' | 'peter' ) | 'sanct' & 'peterburg'"; - $repl = "'peterburg' | 'peter' | 'sanct' & 'peterburg'"; - $dump =~ s/(?<=^\Q$prefix\E)\Q$orig\E/$repl/mg; - } - - if ($old_version lt '9.5') - { - # adjust some places where we don't print so many parens anymore - - my $prefix = "CONSTRAINT (?:sequence|copy)_con CHECK [(][(]"; - my $orig = "((x > 3) AND (y <> 'check failed'::text))"; - my $repl = "(x > 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $prefix = "CONSTRAINT insert_con CHECK [(][(]"; - $orig = "((x >= 3) AND (y <> 'check failed'::text))"; - $repl = "(x >= 3) AND (y <> 'check failed'::text)"; - $dump =~ s/($prefix)\Q$orig\E/$1$repl/mg; - - $orig = "DEFAULT ((-1) * currval('public.insert_seq'::regclass))"; - $repl = - "DEFAULT ('-1'::integer * currval('public.insert_seq'::regclass))"; - $dump =~ s/\Q$orig\E/$repl/mg; - - my $expr = - "(rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3.id3a = new.id3a) AND (rule_and_refint_t3.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - - $expr = - "(rule_and_refint_t3_1.id3a = new.id3a) AND (rule_and_refint_t3_1.id3b = new.id3b)"; - $dump =~ s/WHERE \(\(\Q$expr\E\)/WHERE ($expr/g; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - - # _mash_view_whitespace doesn't handle multi-command rules; - # rather than trying to fix that, just hack the exceptions manually. - - my $prefix = - "CREATE RULE rtest_sys_del AS ON DELETE TO public.rtest_system DO (DELETE FROM public.rtest_interface WHERE (rtest_interface.sysname = old.sysname);"; - my $line2 = " DELETE FROM public.rtest_admin"; - my $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - $prefix = - "CREATE RULE rtest_sys_upd AS ON UPDATE TO public.rtest_system DO (UPDATE public.rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname);"; - $line2 = " UPDATE public.rtest_admin SET sysname = new.sysname"; - $line3 = " WHERE (rtest_admin.sysname = old.sysname);"; - $dump =~ - s/(?<=\Q$prefix\E)\Q$line2$line3\E \);/\n$line2\n $line3\n);/mg; - - # and there's one place where pre-9.3 uses a different table alias - $dump =~ s {^(CREATE\sRULE\srule_and_refint_t3_ins\sAS\s - ON\sINSERT\sTO\spublic\.rule_and_refint_t3\s - WHERE\s\(EXISTS\s\(SELECT\s1\sFROM\spublic\.rule_and_refint_t3)\s - (WHERE\s\(\(rule_and_refint_t3) - (\.id3a\s=\snew\.id3a\)\sAND\s\(rule_and_refint_t3) - (\.id3b\s=\snew\.id3b\)\sAND\s\(rule_and_refint_t3)} - {$1 rule_and_refint_t3_1 $2_1$3_1$4_1}mx; - - # Also fix old use of NATURAL JOIN syntax - $dump =~ s {NATURAL JOIN public\.credit_card r} - {JOIN public.credit_card r USING (cid)}mg; - $dump =~ s {NATURAL JOIN public\.credit_usage r} - {JOIN public.credit_usage r USING (cid)}mg; - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; @@ -661,37 +525,6 @@ sub _mash_view_qualifiers return $dump; } - -# Internal subroutine to mangle whitespace within view/rule commands. -# Any consecutive sequence of whitespace is reduced to one space. -sub _mash_view_whitespace -{ - my ($dump) = @_; - - foreach my $leader ('CREATE VIEW', 'CREATE RULE') - { - my @splitchunks = split $leader, $dump; - - $dump = shift(@splitchunks); - foreach my $chunk (@splitchunks) - { - my @thischunks = split /;/, $chunk, 2; - my $stmt = shift(@thischunks); - - # now $stmt is just the body of the CREATE VIEW/RULE - $stmt =~ s/\s+/ /sg; - # we also need to smash these forms for sub-selects and rules - $stmt =~ s/\( SELECT/(SELECT/g; - $stmt =~ s/\( INSERT/(INSERT/g; - $stmt =~ s/\( UPDATE/(UPDATE/g; - $stmt =~ s/\( DELETE/(DELETE/g; - - $dump .= $leader . $stmt . ';' . $thischunks[0]; - } - } - return $dump; -} - =pod =item adjust_new_dumpfile($old_version, $dump) @@ -779,36 +612,6 @@ sub adjust_new_dumpfile $dump =~ s/^SET default_table_access_method = heap;\n//mg; } - # During pg_upgrade, we reindex hash indexes if the source is pre-v10. - # This may change their tables' relallvisible values, so don't compare - # those. - if ($old_version < 10) - { - $dump =~ s/ - (^SELECT\s\*\sFROM\spg_catalog\.pg_restore_relation_stats\( - [^;]*'relation',\s'public\.hash_[a-z0-9]*_heap'::regclass, - [^;]*'relallvisible',)\s'\d+'::integer - /$1 ''::integer/mgx; - } - - # dumps from pre-9.6 dblink may include redundant ACL settings - if ($old_version lt '9.6') - { - my $comment = - "-- Name: FUNCTION dblink_connect_u\(.*?\); Type: ACL; Schema: public; Owner: .*"; - my $sql = - "REVOKE ALL ON FUNCTION public\.dblink_connect_u\(.*?\) FROM PUBLIC;"; - $dump =~ s/^--\n$comment\n--\n+$sql\n+//mg; - } - - if ($old_version lt '9.3') - { - # CREATE VIEW/RULE statements were not pretty-printed before 9.3. - # To cope, reduce all whitespace sequences within them to one space. - # This must be done on both old and new dumps. - $dump = _mash_view_whitespace($dump); - } - # Suppress blank lines, as some places in pg_dump emit more or fewer. $dump =~ s/\n\n+/\n/g; -- 2.50.1 (Apple Git-155) --WhtY6+QncUkBAPlR-- ^ permalink raw reply [nested|flat] 277+ messages in thread
end of thread, other threads:[~2026-07-08 21:39 UTC | newest] Thread overview: 277+ messages (download: mbox mbox.gz follow: Atom feed) -- links below jump to the message on this page -- 2026-06-01 21:55 [PATCH v4 1/3] remove PQfn Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email protected]> 2026-07-08 21:39 [PATCH v1 1/1] clean up AdjustUpgrade.pm after pg_upgrade min version bump Nathan Bossart <[email 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