Обсуждение: polygon problem

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

polygon problem

От
Brent Wood
Дата:
A novice question (hopefully in the correct list):

I have installed PostgreSQL v6.5.3 on a Mandrake (RH 6.0) Linux system.
Regression tests do the normal thing....

Created a database "mydb", with a table "table1", comprising:
name            type        lgth        null?

p_name       bpchar     25     NOT NULL
s_region      polygon
p_type        bpchar     1

I'm trying to get data into this table, using the insert command to get
a feel for it, and the copy command for bulk insertions. (Longer term
goal is to have some code to load data from GIS packages into postgresql
for management/query systems)
   insert into table1 ( p_name ) values ('poly1');
This works fine, the table has a single record, with NULL's in the other
two attrs.
   insert into table1 ( p_name, p_type ) values ('poly1', 's');
This works, inserting a second record with only the polygon attr as
NULL.
   insert into table1 values ('poly1',((0,0),(0,1),(1,0)),'s');
This fails with the msg:
ERROR:   parser: parser error at or near ","

As I read the docs on polygon types, this should work. I can't find a
reference as to whether the polygon definition needs to repeat the last
coord pair to properly close the polygon or not. I have tried the insert
command with spaces between parentheses & values, and without commas
between polygon coords.

I need some help in getting carification of the polygon (& if possible,
other geometric datatypes) text formats for using with the insert/copy
SQL commands.

Related to this, given that the main purpose of the database will be
point-in-poly queries, some info on the relative merits of closed paths
vs polygons would also be appreciated (relative space, performance,
etc). I'm assuming (out of ignorance) that while they are functionally
equivalent, I'm better of using the polygon datatype in this context.


Any advice/suggestions gratefully accepted....

Thanks,
Brent Wood



Re: [SQL] polygon problem

От
"Gene Selkov Jr."
Дата:
According to Brent Wood:
> 
>     insert into table1 values ('poly1',((0,0),(0,1),(1,0)),'s');
> This fails with the msg:
> ERROR:   parser: parser error at or near ","
> 
> As I read the docs on polygon types, this should work.

It shouldn't. The SQL parser can't read the VALUES() clause because
you omitted the quotes around the polygon string. It had to be:
    insert into table1 values ('poly1', '((0,0),(0,1),(1,0))', 's');

or
    insert into table1 values ('poly1', '(0,0,0,1,1,0)', 's');


--Gene


Re: [SQL] polygon problem

От
Tom Lane
Дата:
Brent Wood <brent.wood@blazemail.com> writes:
>     insert into table1 values ('poly1',((0,0),(0,1),(1,0)),'s');
> This fails with the msg:
> ERROR:   parser: parser error at or near ","

I think you need quotes around the polygon value, ie,
   insert into table1 values ('poly1','((0,0),(0,1),(1,0))','s');

As a rule of thumb, the only datatypes that don't need quotes around
literal values in SQL statements are numeric types.  Our SQL parser
doesn't understand weird datatypes like polygon --- it wants a string
literal, which it'll eventually hand off to the type-specific input
routine for the datatype.
        regards, tom lane