Re: Update Unicode data to Unicode 16.0.0

Nathan Bossart <nathandbossart@gmail.com>

From: Nathan Bossart <nathandbossart@gmail.com>
To: Jeff Davis <pgsql@j-davis.com>
Cc: Peter Eisentraut <peter@eisentraut.org>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2025-04-06T14:16:17Z
Lists: pgsql-hackers
On Wed, Mar 05, 2025 at 02:33:42PM -0600, Nathan Bossart wrote:
> +	/*
> +	 * The builtin provider did not exist prior to version 17. While there are
> +	 * still problems that could potentially be caught from earlier versions,
> +	 * such as an index on NORMALIZE(), we don't check for that here.
> +	 */
> +	if (GET_MAJOR_VERSION(cluster->major_version) < 1700)
> +		return;
> 
> nitpick: In most cases, I think this check is done in
> check_and_dump_old_cluster() before actually calling the checking function.
> I don't think there's any big problem here, except you might strand the
> memory allocated for the task.
> 
> +	if (!unicode_version_changed(cluster))
> +	{
> +		check_ok();
> +		return;
> +	}
> 
> Same nitpick here about stranding the task memory.

Coverity is unhappy about these.  I think we should at least do something
like the following.  I'll commit this when I have an opportunity.

diff --git a/src/bin/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c
index 8f946c4e3d6..18c2d652bb6 100644
--- a/src/bin/pg_upgrade/check.c
+++ b/src/bin/pg_upgrade/check.c
@@ -1825,7 +1825,7 @@ static void
 check_for_unicode_update(ClusterInfo *cluster)
 {
     UpgradeTaskReport report;
-    UpgradeTask *task = upgrade_task_create();
+    UpgradeTask *task;
     const char *query;

     /*
@@ -1920,6 +1920,7 @@ check_for_unicode_update(ClusterInfo *cluster)
         "        d.datname = current_database() AND "
         "        d.encoding = pg_char_to_encoding('UTF8');";

+    task = upgrade_task_create();
     upgrade_task_add_step(task, query,
                           process_unicode_update,
                           true, &report);

-- 
nathan



Commits

  1. pg_upgrade: Fix memory leak in check_for_unicode_update().

  2. pg_upgrade check for Unicode-dependent relations.

  3. Update Unicode data to Unicode 16.0.0