On 04.09.25 11:01, Peter Eisentraut wrote:
On 03.09.25 17:04, Peter Eisentraut wrote:
Consider a third-party extension that does something like dblink or postgres_fdw.  It will compile against a server and also a libpq.  The server and the libpq might not be of the same major version.  (On Debian, only the latest libpq will be available.)  If you have for example server version 17 and libpq version 18, then you will get the pg_int64 typedef both from postgres_ext.h (from the PG17 server includes) and from libpq-fe.h (from PG18 libpq).  That is not allowed in C99, and even if it were, the underlying types of PG_INT64_TYPE (in PG17) and int64_t (in PG18) might be different (long int vs. long long int) and this would fail.

I think this could be fixed by moving the definition of pg_int64 back to postgres_ext.h.  Then extension builds would only get one definition, because of the header guards.  Depending on include order, they could get a different underlying type, but that's a smaller problem, since the type is supposed to be deprecated anyway.

Here is a patch that has been reported to fix the problem.

I propose to go ahead with this patch in a few days if there are no other solutions coming.



Reply via email to