Обсуждение: Problem copying polygon data into a table

Поиск
Список
Период
Сортировка

Problem copying polygon data into a table

От
Brent Wood
Дата:
I have an text file in the format:

800|((180.87575,-45.98757),(180.87868, -45.98798),...,(Xn,Yn))

to be read into a table of:
 attr        type
id          int
region   polygon

using the command

copy <table> from '<file>' using delimiters '|';

The polygon has about 800 vertices (& is relatively small as some of the
polygons in my dataset go).

Trying to copy this into the table generates the error msg:

ERROR: Tuple is too big: size 12892

Does this mean that I've done summat incorrect, or that there is an
undocumented limit in what can be loaded in a "copy" command, or a limit
in the size (not area) of a polygon attribute?

The message gives me the impression that there is a limit in the length
of the string representing the polygon, so I could possibly fit more
vertices by reducing the precision of each, but it still implies a limit
which may render PostgreSQL unsuitable for my purposes.


Any advice appreciated....
 Thanks,
    Brent



Re: [SQL] Problem copying polygon data into a table

От
wieck@debis.com (Jan Wieck)
Дата:
> The polygon has about 800 vertices (& is relatively small as some of the
> polygons in my dataset go).
>
> Trying to copy this into the table generates the error msg:
>
> ERROR: Tuple is too big: size 12892

    It  is  a  very  old  limitation, that one row (including the
    systems per row information and ALL attribute values)  cannot
    exceed 8K - pageheader.

    800  vertices is 1600 double precision floats is 12800 bytes.

    We actually discuss how to tackle that problem  in  a  future
    release.   And  that  far we know about a solution that could
    make your problem go away.  What we don't have is a consensus
    on, and implementation of this solution.


Jan

--

#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me.                                  #
#========================================= wieck@debis.com (Jan Wieck) #

Re: [SQL] Problem copying polygon data into a table

От
Tom Lane
Дата:
Brent Wood <brent.wood@blazemail.com> writes:
> The polygon has about 800 vertices (& is relatively small as some of the
> polygons in my dataset go).
> Trying to copy this into the table generates the error msg:
> ERROR: Tuple is too big: size 12892
> Does this mean that I've done summat incorrect, or that there is an
> undocumented limit in what can be loaded in a "copy" command, or a limit
> in the size (not area) of a polygon attribute?

There is a limit, but it's hardly "undocumented" --- you're running into
the infamous 8K-per-tuple limit.  I believe polygons are stored with
two float8's per vertex, so an 800-vertex polygon would take 16*800
bytes which matches your error message pretty nearly.  You can only
expect to fit maybe 500 vertexes in the standard 8K block size ...
less if there's much other data in your tuples :-(

This is a longstanding problem.  There is discussion raging right now
on the pghackers list about fixing it, and I think something may
actually happen in the next release or two.  In the meantime, the
only reasonably simple recourse is to increase BLCKSZ (see
src/include/config.h).  But you can only bump it up as far as 32K,
which'd be about 2K polygon vertexes; I don't know if that's enough
for your purposes.
        regards, tom lane