On Mon, Mar 24, 2025, at 12:54 PM, Tom Lane wrote: > Robert Haas <[email protected]> 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/
autoversion.patch.nocfbot
Description: Binary data
