[postgis-tickets] [PostGIS] #3006: Numeric overflow when executing AddRasterConstraints
PostGIS
trac at osgeo.org
Mon Dec 1 09:13:29 PST 2014
#3006: Numeric overflow when executing AddRasterConstraints
--------------------+-------------------------------------------------------
Reporter: rtorre | Owner: dustymugs
Type: defect | Status: new
Priority: high | Milestone: PostGIS 2.1.5
Component: raster | Version: 2.1.x
Keywords: |
--------------------+-------------------------------------------------------
We are experiencing a `numeric field overflow` when adding overviews to a
raster and subsequently calling `AddRasterConstraints`.
Executing this:
{{{
SELECT
AddRasterConstraints('cdb_importer','o_256_importer_e7efb068796911e4a19a5e0004719e63','the_raster_webmercator',TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,TRUE,TRUE,TRUE,TRUE,TRUE);
}}}
I get this in the postgresql log:
{{{
PL/pgSQL function
addrasterconstraints(name,name,name,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean)
line 53 at RETURN
psql:/tmp/imports/20141201-2293-x4pho4/importer_e7efb068796911e4a19a5e0004719e63.sql:7472:
NOTICE: SQL used for failed constraint: ALTER TABLE
cdb_importer.o_256_importer_e7efb068796911e4a19a5e0004719e63 ADD
CONSTRAINT enforce_sca
lex_the_raster_webmercator CHECK
(st_scalex(the_raster_webmercator)::numeric(16,10) =
(1252219.04682188)::numeric(16,10))
CONTEXT: PL/pgSQL function
_add_raster_constraint_scale(name,name,name,character) line 38 at RETURN
PL/pgSQL function addrasterconstraints(name,name,name,text[])
line
60 at assignment
PL/pgSQL function
addrasterconstraints(name,name,name,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean)
line 53 at RETURN
psql:/tmp/imports/20141201-2293-x4pho4/importer_e7efb068796911e4a19a5e0004719e63.sql:7472:
NOTICE: Returned error message: numeric field overflow
CONTEXT: PL/pgSQL function
_add_raster_constraint_scale(name,name,name,character) line 38 at RETURN
}}}
I think the problem is located in the file
`./raster/rt_pg/rtpostgis.sql.in`, around lines 6964-6968:
{{{
sql := 'ALTER TABLE ' || fqtn
|| ' ADD CONSTRAINT ' || quote_ident(cn)
|| ' CHECK (st_scale' || $4 || '('
|| quote_ident($3)
|| ')::numeric(16,10) = (' || attr || ')::numeric(16,10))';
RETURN _add_raster_constraint(cn, sql);
}}}
(See [8396] and #1373 for more on that constraint)
Executing this from psql I get the same error:
{{{
# select (1252219.04682188)::numeric(16,10);
ERROR: numeric field overflow
DETAIL: A field with precision 16, scale 10 must round to an absolute
value less than 10^6.
}}}
I think this is related to other issues people is having, not only because
of big values of `st_scale` but also with (very) small values, when input
values have too much precision:
* http://gis.stackexchange.com/questions/118120/numeric-issue-while-
loading-floating-point-valued-geotiff-into-postgis
* http://gis.stackexchange.com/questions/59732/uploading-raster-format-
tif-to-postgis-through-raster2pgsql
This file from Natural Earth can be used to reproduce the issue:
http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/raster/SR_HR.zip
I think the input values must be rounded instead of adding a constraint.
--
Ticket URL: <http://trac.osgeo.org/postgis/ticket/3006>
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