Re: RFC: Extension Packaging & Lookup
David E. Wheeler <david@justatheory.com>
From: "David E. Wheeler" <david@justatheory.com>
To: PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Cc: Gabriele Bartolini <gabriele.bartolini@enterprisedb.com>,
Peter Eisentraut <peter@eisentraut.org>,
Christoph Berg <myon@debian.org>,
Andres Freund <andres@anarazel.de>
Date: 2024-10-31T20:12:44Z
Lists: pgsql-hackers
On Oct 31, 2024, at 15:41, David E. Wheeler <david@justatheory.com> wrote: > Other Options? > -------------- > > I kind of like Option 2, as it would allow us to eventually support non-`CREATE EXTENSION` modules as extensions, too. I imagine distributing, say `auto_explain` in an extension directory of its own, with a `auto_explain.control` file that identifies it as a LOAD-only extension. Then specifying `auto_explain:auto_explain` would work as expected. Or perhaps just `auto_explain:` could load *all* the modules included in the auto_explain "extension". > > But then maybe I'm starting to talk myself into arguing that `LOAD` ought to be deprecated, `CREATE EXTENSION` could support non-SQL extensions, and the `*preload*` GUCs would contain a list of extensions rather than module files. > > But I digress. Any ideas about other options to address this design challenge? I just thought of another one: Option 3 -------- * Add a new preload GUCs for extensions: `shared_preload_extensions`, `session_preload_extensions`, etc. * Specify just extension names for these GUCs, instead of module file names. * Leave `LOAD/*preload_libraries` unchanged. * Have it search the `extension_path` directories just as `CREATE EXTENSION` does. Pros: * The behaviors of `LOAD/*preload_libraries` are unchanged * Provide a more future-looking interface, where we perhaps eventually deprecate `LOAD/*preload_libraries` in favor of shipping all modules as extensions. Cons: * More GUCs! * The new GUCs load *all* of the modules included in an extension, rather than specific ones. But maybe we can borrow the `$extension:module` syntax from Option 2 to support loading a single extension * Upgrades from Postgres 17 would still need any extension modules loaded in `*preload_libraries` moved to the new GUCs, since the files will live in a new location I kind of like this one… D