Re: Only one version can be installed when using extension_control_path

Pierrick <pierrick.chovelon@dalibo.com>

From: Pierrick <pierrick.chovelon@dalibo.com>
To: Peter Eisentraut <peter@eisentraut.org>
Cc: "pgsql-hackers@lists.postgresql.org" <pgsql-hackers@lists.postgresql.org>, "David G. Johnston" <david.g.johnston@gmail.com>, Tom Lane <tgl@sss.pgh.pa.us>, Matheus Alcantara <matheusssilv97@gmail.com>
Date: 2025-09-11T18:03:07Z
Lists: pgsql-hackers
On 11/09/2025 16:11, Peter Eisentraut wrote:
>
> Here is a patch for that.  Please test it against your setup.
Thanks a lot. Here is a test, and IMHO, it looks good.

-- version 1 of monextension is in /tmp/extensions/share/extension

postgres=# show extension_control_path ;
                 extension_control_path
------------------------------------------------------
  $system:/tmp/extensions/share:/tmp/extensions2/share
(1 ligne)

postgres=# select * from pg_available_extensions where name = 
'monextension';
      name     | default_version | installed_version |    comment
--------------+-----------------+-------------------+---------------
  monextension | 1.0             |                   | Mon extension
(1 ligne)

-- switching order

postgres=# alter system set extension_control_path = 
'$system:/tmp/extensions2/share:/tmp/extensions/share';
ALTER SYSTEM
postgres=# select pg_reload_conf();
  pg_reload_conf
----------------
  t
(1 ligne)

postgres=# show extension_control_path ;
                 extension_control_path
------------------------------------------------------
  $system:/tmp/extensions2/share:/tmp/extensions/share
(1 ligne)

-- version 2 of monextension is in /tmp/extensions2/share/extension

postgres=# select * from pg_available_extensions where name = 
'monextension';
      name     | default_version | installed_version |    comment
--------------+-----------------+-------------------+---------------
  monextension | 2.0             |                   | Mon extension
(1 ligne)

-- make a mistake in first folder

postgres=# alter system set extension_control_path = 
'$system:/tmp/extension_old/share:/tmp/extensions/share';
ALTER SYSTEM
postgres=# select pg_reload_conf();
  pg_reload_conf
----------------
  t
(1 ligne)

-- still version 2.0
postgres=# select * from pg_available_extensions where name = 
'monextension';
      name     | default_version | installed_version |    comment
--------------+-----------------+-------------------+---------------
  monextension | 1.0             |                   | Mon extension
(1 ligne)




Commits

  1. Hide duplicate names from extension views