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.