The new GUC specifies a path to look for extension control files. The default value is $system, which looks in the compiled-in location, as before.
The path search uses the same code and works in the same way as dynamic_library_path.
Some use cases of this are: (1) testing extensions during package builds, (2) installing extensions outside security-restricted containers like Python.app (on macOS), (3) adding extensions to PostgreSQL running in a Kubernetes environment using operators such as CloudNativePG without having to rebuild the base image for each new extension.
There is also a tweak in Makefile.global so that it is possible to install extensions using PGXS into an different directory than the default, using 'make install prefix=/else/where'. This previously only worked when specifying the subdirectories, like 'make install datadir=/else/where/share pkglibdir=/else/where/lib', for purely implementation reasons. (Of course, without the path feature, installing elsewhere was rarely useful.)
Author: Peter Eisentraut
4f7f7b03758 extension_control_path
doc/src/sgml/config.sgml | 68 ++++
doc/src/sgml/extend.sgml | 19 +-
doc/src/sgml/ref/create_extension.sgml | 6 +-
src/Makefile.global.in | 19 +-
src/backend/commands/extension.c | 403 +++++++++++++--------
src/backend/utils/fmgr/dfmgr.c | 77 ++--
src/backend/utils/misc/guc_tables.c | 13 +
src/backend/utils/misc/postgresql.conf.sample | 1 +
src/include/commands/extension.h | 2 +
src/include/fmgr.h | 3 +
src/test/modules/test_extensions/Makefile | 1 +
src/test/modules/test_extensions/meson.build | 5 +
.../t/001_extension_control_path.pl | 80 ++++
13 files changed, 512 insertions(+), 185 deletions(-)
Upstream: git.postgresql.org