Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uuWsN-00Bpve-EO for pgsql-docs@arkaria.postgresql.org; Fri, 05 Sep 2025 13:53:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uuWsM-007rL5-F5 for pgsql-docs@arkaria.postgresql.org; Fri, 05 Sep 2025 13:53:14 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uuWsM-007rKx-5t for pgsql-docs@lists.postgresql.org; Fri, 05 Sep 2025 13:53:14 +0000 Received: from mail1.dalibo.net ([51.159.93.128] helo=mail.dalibo.com) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uuWsI-000ihB-2g for pgsql-docs@lists.postgresql.org; Fri, 05 Sep 2025 13:53:14 +0000 Received: from [IPV6:2a04:cec0:1181:f450:a58f:ec4:34d6:7df0] (unknown [80.215.79.132]) by mail.dalibo.com (Postfix) with ESMTPSA id 74F6D2661A for ; Fri, 5 Sep 2025 15:53:10 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=dalibo.com; s=a; t=1757080390; bh=NoMi2eHYhVhbk1RXgkifux4NuCBcG90+6mSB6yiT/NY=; h=Date:To:From:Subject:From; b=JCUVEqQryWWJ3P4S95mqU3c8jfHObhl4p1OlhUp7ZKgQy1c4rIVWDjP6XKVokp84Y g/u9B+bLWOyANjTBMBfJQZwZ1/82dpNjFwHdjWKU18iTQBxWAafM8pGAypxYkWaCL2 6W41GsRULH9Gu9pcmOzNiqz7MykTZm/iI9f2hdyg= Content-Type: multipart/mixed; boundary="------------Uaa6zpicTRUS8Qlv0bhy7C9A" Message-ID: <211e8d61-7fea-4eb2-892a-c3c1f32e3a89@dalibo.com> Date: Fri, 5 Sep 2025 15:53:09 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: pgsql-docs@lists.postgresql.org From: Pierrick Subject: Adding clarification on extension_control_path when extension is present in multiple folders List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------Uaa6zpicTRUS8Qlv0bhy7C9A Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit When playing with the new GUC extension_control_path, I found that the paths are evaluated one by one (like search_path)and if an extension is present in multiple paths, only the on in the first path will be considered.I think this is totally fine, but I'd like to adda documentation patch to explain this (attached file). What do you think ? Pierrick, Here is an example to understand that I can only create extension in version 2.0. postgres=# show extension_control_path ; extension_control_path -----------------------------------------------------------------------------  $system:/extensions/meilleureextension/share:/extensions/monextension/share (1 row) postgres=# select * from pg_available_extensions where name like '%mon%';      name     | default_version | installed_version |    comment --------------+-----------------+-------------------+---------------  monextension | 2.0             |                   | Meilleure  monextension | 1.0             |                   | Mon extension (2 rows) postgres=# select * from pg_available_extensions where name like '%mon%';      name     | default_version | installed_version |    comment --------------+-----------------+-------------------+---------------  monextension | 2.0             |                   | Meilleure  monextension | 1.0             |                   | Mon extension (2 rows) postgres=# create extension monextension version "1.0" ; ERROR:  extension "monextension" has no installation script nor update path for version "1.0" postgres=# create extension monextension ; CREATE EXTENSION postgres=# select * from pg_available_extensions where name like '%mon%';      name     | default_version | installed_version |    comment --------------+-----------------+-------------------+---------------  monextension | 2.0             | 2.0               | Meilleure  monextension | 1.0             | 2.0               | Mon extension (2 rows) --------------Uaa6zpicTRUS8Qlv0bhy7C9A Content-Type: text/x-patch; charset=UTF-8; name="0001-Add-clarification-on-extension_control_path.patch" Content-Disposition: attachment; filename="0001-Add-clarification-on-extension_control_path.patch" Content-Transfer-Encoding: base64 RnJvbSBkMDRhZjk4NjZkOWVkZGVhMDRiMDQ2MDA1ZGYzYjJjZGM5OWIyOGVjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQaWVycmljayBDaG92ZWxvbiA8cGllcnJpY2suY2hv dmVsb25AZGFsaWJvLmNvbT4KRGF0ZTogRnJpLCA1IFNlcCAyMDI1IDE1OjM2OjIwICswMjAw ClN1YmplY3Q6IFtQQVRDSF0gQWRkIGNsYXJpZmljYXRpb24gb24gZXh0ZW5zaW9uX2NvbnRy b2xfcGF0aAoKLS0tCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgfCA2ICsrKysrKwogMSBm aWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dt bC9jb25maWcuc2dtbCBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAppbmRleCAwYTRiM2U1 NWJhNS4uNzUyZDE4ZGVjNTMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTExMDc5LDYgKzExMDc5LDEy IEBAIGV4dGVuc2lvbl9jb250cm9sX3BhdGggPSAnL3Vzci9sb2NhbC9zaGFyZS9wb3N0Z3Jl c3FsOiRzeXN0ZW0nCiBkeW5hbWljX2xpYnJhcnlfcGF0aCA9ICcvdXNyL2xvY2FsL2xpYi9w b3N0Z3Jlc3FsOiRsaWJkaXInCiA8L3Byb2dyYW1saXN0aW5nPgogICAgICAgIDwvcGFyYT4K KworCTxwYXJhPgorICAgICAgICBUaGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgb3JkZXIg aW4gd2hpY2ggZXh0ZW5zaW9ucyBhcmUgc2VhcmNoZWQgd2hlbiBjcmVhdGVkLgorICAgICAg ICBJZiBhbiBleHRlbnNpb24gaXMgcHJlc2VudCBpbiBtdWx0aXBsZSBwYXRocywgb25seSB0 aGUgZmlyc3QgcGF0aCB0aGF0IGNvbnRhaW5zCisgICAgICAgIGV4dGVuc2lvbidzIGZpbGVz IHdpbGwgYmUgdXNlZC4KKyAgICAgICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVtPgogICAg ICA8L3Zhcmxpc3RlbnRyeT4KIAotLSAKMi40My4wCgo= --------------Uaa6zpicTRUS8Qlv0bhy7C9A--