<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><div dir="ltr"><div dir="ltr">Dear Regina<div><br></div><div>Many thanks for restarting the issue of detecting PostgreSQL and PostGIS versions, we will look into it.</div><div><br></div><div>Concerning C compatibility, we already need to cope with this for PostgreSQL. I have collected below some pieces of code we need to put to cope with various PostgreSQL versions (this is not exhaustive). There is no problem for us to do similar things for changes in PostGIS.</div><div><br></div><div>#if MOBDB_PGSQL_VERSION < 110000<br>  pq_sendint(buf, (uint32) ts->count, 4);<br>#else<br>  pq_sendint32(buf, ts->count);<br>#endif<br><br>#if MOBDB_PGSQL_VERSION < 130000<br>#include <access/tuptoaster.h><br>#else<br>#include <access/heaptoast.h><br>#endif<br>#if MOBDB_PGSQL_VERSION < 110000<br>#include <catalog/pg_collation.h><br>#include <catalog/pg_operator.h><br>#else<br>#include <catalog/pg_collation_d.h><br>#include <catalog/pg_operator_d.h><br>#endif<br><br>#if MOBDB_PGSQL_VERSION >= 120000<br>#include <utils/float.h><br>#endif<br><br>#if MOBDB_PGSQL_VERSION < 110000<br>  RangeType *range = PG_GETARG_RANGE(1);<br>#else<br>  RangeType *range = PG_GETARG_RANGE_P(1);<br>#endif<br><br>#if MOBDB_PGSQL_VERSION < 140000<br>/**<br> * Returns the union of the range values. If strict is true, it is an error<br> * that the two input ranges are not adjacent or overlapping.<br> *<br> * @note Function copied verbatim from rangetypes.c since it is static before <br> * PostgreSQL version 14.<br> */<br>static RangeType *<br>range_union_internal(TypeCacheEntry *typcache, RangeType *r1, RangeType *r2,<br>  bool strict)<br>{<br>  [...]<br>}<br>#endif<br><br>#if MOBDB_PGSQL_VERSION < 110000<br>PG_FUNCTION_INFO_V1(temporal_gist_decompress);<br>/**<br> * GiST decompress method for temporal values (result in a period)</div><div> *<br> * The decompress method is optional after PostgreSQL version 11<br> */<br>PGDLLEXPORT Datum<br>temporal_gist_decompress(PG_FUNCTION_ARGS)<br>{<br>  GISTENTRY  *entry = (GISTENTRY *) PG_GETARG_POINTER(0);<br>  PG_RETURN_POINTER(entry);<br>}<br>#endif<br></div></div></div>