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.