On Mon, Mar 24, 2025, at 12:54 PM, Tom Lane wrote:
> Robert Haas <robertmh...@gmail.com> writes:
> > It looks reasonable to me. I am a bit worried that using PG_VERSION as
> > the version string is going to feel like the wrong thing at some
> > stage, but I can't really say why, and I think it's better to do
> > something now and maybe have to revise it later than to do nothing now
> > and hope that we come up with a brilliant idea at some point in the
> > future.
> 
> Agreed.  I think something is clearly better than nothing here, and
> PG_VERSION has the huge advantage that we need no new mechanism to
> maintain it.  (A version identifier that isn't updated when it needs
> to be is worse than no identifier, IMO.)

Agreed. My only concern is that people can confuse this version with the one
available in pg_extension or pg_available_extension* functions.

> If somebody thinks of a better idea and is willing to do the legwork
> to make it happen, we can surely change to something else later on.
> Or invent another field with different semantics, or whatever.

I think those modules without control file, it is natural to use PG_VERSION.
However, I'm concerned that users can confuse the version if we provide
PG_VERSION as version and the extension catalog says something different.

postgres=# select * from pg_available_extensions where name = 'plperl';
  name  | default_version | installed_version |           comment           
--------+-----------------+-------------------+-----------------------------
plperl | 1.0             |                   | PL/Perl procedural language
(1 row)

postgres=# load 'plperl';
LOAD
postgres=# select * from pg_get_loaded_modules();
module_name | version | file_name 
-------------+---------+-----------
plperl      | 18devel | plperl.so
(1 row)

Maybe a note into default_version [1] is sufficient to clarify or a mechanism
to grab the information from control file and expose it as a macro. (I attached
an idea to accomplish this goal although it lacks meson support.) Thoughts?

I played with it a bit and it seems good to go.

postgres=# select version();
                                           version                              
              
----------------------------------------------------------------------------------------------
PostgreSQL 18devel on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 
12.2.0, 64-bit
(1 row)

postgres=# select * from pg_get_loaded_modules();
module_name | version | file_name 
-------------+---------+-----------
(0 rows)

postgres=# load 'wal2json';
LOAD
postgres=# select * from pg_get_loaded_modules();
module_name | version |  file_name  
-------------+---------+-------------
wal2json    | 2.6     | wal2json.so
(1 row)

Code:

diff --git a/wal2json.c b/wal2json.c
index 0c6295d..1f439be 100644
--- a/wal2json.c
+++ b/wal2json.c
@@ -40,7 +40,14 @@
#define    WAL2JSON_FORMAT_VERSION         2
#define    WAL2JSON_FORMAT_MIN_VERSION     1
 
+#if PG_VERSION_NUM >= 180000
+PG_MODULE_MAGIC_EXT(
+       .name = "wal2json",
+       .version = WAL2JSON_VERSION
+);
+#else
PG_MODULE_MAGIC;
+#endif


[1] https://www.postgresql.org/docs/current/extend-extensions.html


--
Euler Taveira
EDB   https://www.enterprisedb.com/

Attachment: autoversion.patch.nocfbot
Description: Binary data

Reply via email to