[PostGIS] #5901: raster2pgsql does not work with gdal 3.7+ due to new int8 datatype
PostGIS
trac at osgeo.org
Thu May 22 06:11:43 PDT 2025
#5901: raster2pgsql does not work with gdal 3.7+ due to new int8 datatype
------------------------+---------------------------
Reporter: lstolcman | Owner: pramsey
Type: defect | Status: new
Priority: medium | Milestone: PostGIS 3.5.4
Component: postgis | Version:
Resolution: | Keywords:
------------------------+---------------------------
Description changed by lstolcman:
Old description:
> raster2pgsql (python version and compiled version) is failing with gdal
> 3.7 and newer
>
> I rounded down the issue, it is due to new datatype added in gdal 3.7:
> https://gdal.org/en/stable/development/rfc/rfc87_signed_int8.html
>
> python version of raster2pgsql does not support GDT_Int8, e.g.:
> https://git.osgeo.org/gitea/postgis/postgis/src/commit/d027c5f62ab4f63ca1618d27edc1c01ac70c9264/raster/scripts/python/raster2pgsql.py#L213
> compiled version seems to not support it either (logs below)
>
> Issue can be reproduced using docker container of gdal and the python
> version of raster2pgsql.
>
> Working raster2pgsql.py example:
>
> 1. download docker image: `docker pull ghcr.io/osgeo/gdal:ubuntu-
> small-3.6.4`
> 2. put example.tif into current directory
> 3. run docker container from current dir (with tif file): `docker run -it
> -v .:/mnt/aaa ghcr.io/osgeo/gdal:ubuntu-small-3.6.4 /bin/bash`
> 4. install postgis in container and enter python console:
>
> {{{
> apt update -y
> apt install python3-pip postgis -y --no-install-recommends
> pip install ipython
> cd /mnt/aaa
> ipython --no-autoindent
> }}}
>
> 5. paste the code to test the issue:
>
> {{{
> from osgeo import gdal
> print(f"{gdal.__version__}")
> org = gdal.Open("example.tif")
> org_band = org.GetRasterBand(1)
> print(f"{org_band.DataType=}")
> }}}
>
> output - supported datatype
>
> {{{
> In [1]: from osgeo import gdal
> ...: print(f"{gdal.__version__}")
> ...: org = gdal.Open("example.tif")
> ...: org_band = org.GetRasterBand(1)
> ...: print(f"{org_band.DataType=}")
> ...:
> 3.6.4
> org_band.DataType=1
> }}}
>
> GDAL 3.7 - raster2pgsql.py failing:
> 1. download docker image: `docker run -it -v .:/mnt/aaa
> ghcr.io/osgeo/gdal:ubuntu-small-3.7.0 /bin/bash`
> 2,3,4,5 - as previously
>
> output - different (new) datatype (int8):
> {{{
> In [1]: from osgeo import gdal
> ...: print(f"{gdal.__version__}")
> ...: org = gdal.Open("example.tif")
> ...: org_band = org.GetRasterBand(1)
> ...: print(f"{org_band.DataType=}")
> ...:
> 3.7.0
> org_band.DataType=14
> }}}
>
>
> the issue in compiled version of raster2pgsql (raster2pgsql.c) can be
> tested using docker (entering into container as above) -
> - `ghcr.io/osgeo/gdal:ubuntu-small-3.8.5` - contains raster2pgsql with
> gdal 3.4
> - `ghcr.io/osgeo/gdal:ubuntu-small-3.9.3` - contains raster2pgsql with
> gdal 3.8
>
> output from raster2pgsql with gdal 3.4 works fine (converts tif to sql)
>
> output of raster2pgsql from gdal 3.9.5 docker image fails with a message:
>
> {{{
> root at 04421679a038:/mnt/aaa# raster2pgsql example.tif > example.sql
> Processing 1/1: example.tif
> ERROR: rt_pixtype_size: Unknown pixeltype
> 13####################################
> ERROR: rt_raster_from_gdal_dataset: Unknown pixel type for GDAL band
> ERROR: convert_raster: Could not convert VRT dataset to PostGIS
> raster##########
> ERROR: process_rasters: Could not process raster: example.tif
> ERROR: Unable to process rasters
> root at 04421679a038:/mnt/aaa#
> }}}
New description:
raster2pgsql (python version and compiled version) is failing with gdal
3.7 and newer
I rounded down the issue, it is due to new datatype added in gdal 3.7:
https://gdal.org/en/stable/development/rfc/rfc87_signed_int8.html
python version of raster2pgsql does not support GDT_Int8, e.g.:
https://git.osgeo.org/gitea/postgis/postgis/src/commit/d027c5f62ab4f63ca1618d27edc1c01ac70c9264/raster/scripts/python/raster2pgsql.py#L213
compiled version seems to not support it either (logs below)
Issue can be reproduced using docker container of gdal and the python
version of raster2pgsql.
Working raster2pgsql.py example:
1. download docker image: `docker pull ghcr.io/osgeo/gdal:ubuntu-
small-3.6.4`
2. put example.tif into current directory
3. run docker container from current dir (with tif file): `docker run -it
-v .:/mnt/aaa ghcr.io/osgeo/gdal:ubuntu-small-3.6.4 /bin/bash`
4. install postgis in container and enter python console:
{{{
apt update -y
apt install python3-pip postgis -y --no-install-recommends
pip install ipython
cd /mnt/aaa
ipython --no-autoindent
}}}
5. paste the code to test the issue:
{{{
from osgeo import gdal
print(f"{gdal.__version__}")
org = gdal.Open("example.tif")
org_band = org.GetRasterBand(1)
print(f"{org_band.DataType=}")
}}}
output - supported datatype
{{{
In [1]: from osgeo import gdal
...: print(f"{gdal.__version__}")
...: org = gdal.Open("example.tif")
...: org_band = org.GetRasterBand(1)
...: print(f"{org_band.DataType=}")
...:
3.6.4
org_band.DataType=1
}}}
GDAL 3.7 - raster2pgsql.py failing:
1. download docker image: `docker run -it -v .:/mnt/aaa ghcr.io/osgeo/gdal
:ubuntu-small-3.7.0 /bin/bash`
2,3,4,5 - as previously
output - different (new) datatype (int8):
{{{
In [1]: from osgeo import gdal
...: print(f"{gdal.__version__}")
...: org = gdal.Open("example.tif")
...: org_band = org.GetRasterBand(1)
...: print(f"{org_band.DataType=}")
...:
3.7.0
org_band.DataType=14
}}}
the issue in compiled version of raster2pgsql (raster2pgsql.c) can be
tested using docker (entering into container as above) -
- `ghcr.io/osgeo/gdal:ubuntu-small-3.8.5` - contains raster2pgsql with
gdal 3.4
- `ghcr.io/osgeo/gdal:ubuntu-small-3.9.3` - contains raster2pgsql with
gdal 3.8
output from raster2pgsql with gdal 3.4 works fine (converts tif to sql)
output of raster2pgsql from gdal 3.9.5 docker image fails with a message:
{{{
root at 04421679a038:/mnt/aaa# raster2pgsql example.tif > example.sql
Processing 1/1: example.tif
ERROR: rt_pixtype_size: Unknown pixeltype
13####################################
ERROR: rt_raster_from_gdal_dataset: Unknown pixel type for GDAL band
ERROR: convert_raster: Could not convert VRT dataset to PostGIS
raster##########
ERROR: process_rasters: Could not process raster: example.tif
ERROR: Unable to process rasters
root at 04421679a038:/mnt/aaa#
}}}
--
--
Ticket URL: <https://trac.osgeo.org/postgis/ticket/5901#comment:1>
PostGIS <http://trac.osgeo.org/postgis/>
The PostGIS Trac is used for bug, enhancement & task tracking, a user and developer wiki, and a view into the subversion code repository of PostGIS project.
More information about the postgis-tickets
mailing list