[postgis-users] PostGIS, 64 bit Solaris, Invalide memory alloc message using force_collection

Michael Fuhr mike at fuhr.org
Wed Feb 1 19:31:25 PST 2006


On Wed, Feb 01, 2006 at 01:01:41AM -0700, Michael Fuhr wrote:
> I have a Sparc running Solaris 9.  All of my PostgreSQL-related
> apps are 32-bit but when I get a chance I'll see if I can build
> 64-bit versions of everything and do some testing.

I've built 64-bit versions of PostgreSQL, GEOS, Proj, and PostGIS
on Solaris 9/sparc.  Here's what I have:

PostgreSQL 8.1.2 on sparc-sun-solaris2.9, compiled by GCC gcc (GCC) 3.4.2
POSTGIS="1.1.2CVS" GEOS="2.2.1-CAPI-1.0.1" PROJ="Rel. 4.4.9, 29 Oct 2004" USE_STATS

PostGIS is definitely having trouble with the 64-bit build.  Even
simple operations fail:

gis=# select '00000000013FF00000000000004000000000000000'::geometry;
ERROR:  Invalid type in wbk

I think part of the problem is the definition of int4 in
lwgeom/lwgparse.c:

typedef unsigned long int4;

That makes int4 64 bits, which probably isn't what's intended.  Is
there a reason not to simply include postgres.h and use PostgreSQL's
definitions for int4, int32, etc.?  I commented out that line and
included postgres.h and got a little farther:

gis=# select '00000000013FF00000000000004000000000000000'::geometry;
                  geometry                  
--------------------------------------------
 00000000013FF00000000000004000000000000000
(1 row)

gis=# select astext('00000000013FF00000000000004000000000000000');
   astext   
------------
 POINT(1 2)
(1 row)

However, that doesn't fix everything.  SRIDs aren't being output,
although apparently they are correctly parsed on input:

gis=# select geomfromewkt('SRID=4326;POINT(1 2)');
                    geomfromewkt                    
----------------------------------------------------
 0020000001000000003FF00000000000004000000000000000
(1 row)

gis=# select asewkt(geomfromewkt('SRID=4326;POINT(1 2)'));
      asewkt       
-------------------
 SRID=0;POINT(1 2)
(1 row)

gis=# select srid(geomfromewkt('SRID=4326;POINT(1 2)'));
 srid 
------
 4326
(1 row)

Here's another problem.  The input is MULTIPOINT(1 2); notice that
the output is different:

gis=# select '00000000040000000100000000013FF00000000000004000000000000000'::geometry;
                                                      geometry                                                      
--------------------------------------------------------------------------------------------------------------------
 00000000040000000400000000013FF0000000000000400000000000000000E000000E007027A800E000000F007027A800E000000F007027A8
(1 row)

Calling geomfromtext('MULTIPOINT(1 2)') first thing in a new session
gives this, which is wrong:

gis=# select geomfromtext('MULTIPOINT(1 2)');
    geomfromtext    
--------------------
 000000000400000000
(1 row)

Making the same query again gets even worse:

gis=# select geomfromtext('MULTIPOINT(1 2)');
[over 2 million characters of output]

I'll keep poking around to see what I can find.

-- 
Michael Fuhr



More information about the postgis-users mailing list