[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