New version: PostGIS 3.6.0 (Released September 2, 2025)
PostGIS 3.6.0 has been available since September 2, 2025. It is designed to work with PostgreSQL 12 through 18 beta 3, requires GEOS 3.8+ (with optimizations for GEOS 3.14+) and Proj 6.1+. To enable all SFCGAL features, version 2.2.0+ is required. (PostGIS)
PostGIS availability and download
PostGIS is the most widely used spatial extension for PostgreSQL, but its availability varies depending on the operating system and version of PostgreSQL. It is important to choose the stable version that is appropriate for your environment to avoid compatibility issues and ensure the reliability of your geospatial processing.
The table below summarizes the stable and experimental versions available for the main systems:
System | PostgreSQL version | Stable PostGIS version | Experimental/Beta version | Download/installation link |
---|---|---|---|---|
Windows | 15 | 3.5.3 | 3.6 (testing only) | VVia StackBuilder included in PostgreSQL: Extensions > Spatial Extensions > PostGIS 3.5.3 Documentation PostGIS Windows |
Ubuntu / Debian | 15 | 3.5 | 3.6 (source compilation) | sudo apt install postgis postgresql-15-postgis-3.5 PostGIS packages Ubuntu/Debian |
RedHat / CentOS / Fedora | 15 | 3.5 | 3.6 (source compilation) | sudo dnf install postgis31_15 PostGIS packages RPM |
Linux (all distros) | All | Source compilation | Last version dev (3.6+) | PostGIS source |
Practical tips
- Version 3.6 is not yet officially available on Windows.
- Experimental versions are intended solely for testing and discovering new features.
- On Windows, StackBuilder facilitates the installation and updating of dependencies.
- On Linux, compiling from source allows access to the latest features, but requires proper configuration of PostgreSQL and development libraries.
Compatibility & required environments
- Compatible versions: PostgreSQL 12 → 18 beta 3
- Essential prerequisites:
- GEOS ≥ 3.8, ideally 3.14+ for performance and new features
- PROJ ≥ 6.1
- SFCGAL ≥ 2.2 to take full advantage of 3D features (Phttps://postgis.net/2025/09/PostGIS-3.6.0/ostGIS)
Noteworthy new features
3D / SFCGAL:
CG_Simplify
,CG_3DAlphaWrapping
for manipulating 3D elements- Geometric transformations: scaling, rotation, translation, 3D buffer, etc. (PostGIS)
Coverage & topology:
ST_CoverageClean(...)
: ensures clean coverage (no overlaps, aligned edges, gaps filled). Example of use:CREATE TABLE example_clean AS SELECT id, ST_CoverageClean(geom) OVER () AS geom FROM example;
Useful for validating the geometry of a coverage. . (PostGIS)
Raster processing:
ST_AsRasterAgg
: efficiently converts geometry to raster during aggregationST_ReclassExact
: fast and accurate reclassification of raster values.ST_IntersectionFractions
: calculates the overlap fractions of raster cells with geometric UE (requires GEOS 3.14).postgis.gdal_cpl_debug
(GUC) : logs GDAL messages in PostgreSQL (PostGIS)
Major changes / Breaking changes to note
ST_TileEnvelope
: envelopes are now restricted to the tile plane extent. (tile plane extent). (PostGIS)geometry_columns
: removal of constraint checks, impacting old workflows. (PostGIS)- Deprecation of integer topological functions: now replaced by their bigint version (PostGIS)
- Change for TIN / PolyhedralSurface: use ST_NumPatches and ST_PatchN instead of ST_NumGeometries, which no longer return sub-geometries (PostGIS)
- Removal of st_approxquantile(raster, double precision), unusable in practice. (PostGIS)
Update process
To migrate to PostGIS 3.6 (3.0 to 3.6):
SELECT postgis_extensions_upgrade();
For versions ≤ 2.5:
ALTER EXTENSION postgis UPDATE;
SELECT postgis_extensions_upgrade();
“` :contentReference[oaicite:10]{index=10}
Advanced use cases
Cleaning up impure coverage
WITH dirty AS (
SELECT id, geom FROM coverage_table
)
SELECT id, ST_AsText(ST_CoverageInvalidEdges(geom) OVER ()) AS invalid_geom
FROM dirty;
CREATE TABLE coverage_clean AS
SELECT id, ST_CoverageClean(geom) OVER () FROM dirty;
SELECT id, ST_AsText(ST_CoverageInvalidEdges(geom) OVER ()) FROM coverage_clean;
Raster reclassification
SELECT ST_ReclassExact(rast, '[(1,10,100),(11,20,200)]') AS reclass_rast
FROM raster_table;
Simple 3D simulation
SELECT CG_3DAlphaWrapping(geom) FROM building_wall;