Thread: arrays and polygons
Hi there i am having problems inserting an array of polygons into a table, i have added the column using: ALTER TABLE species ADD COLUMN location polygon[]; this works fine, but when i try INSERT INTO species (location) VALUES ('{((432,89), (45,87), (89,87)), ((54,78), (34,98))}; I get the following error message: ERROR: Bad polygon external representation '((432' Where am i going wrong, all help is much appreciated DAvid
"David" <de4@kent.ac.uk> writes: > ALTER TABLE species ADD COLUMN location polygon[]; > INSERT INTO species (location) VALUES ('{((432,89), (45,87), (89,87)), > ((54,78), (34,98))}; I think you'd need to double-quote each polygon within the array literal. '{"((432,89), (45,87), (89,87))", "..."}' The array parser doesn't think parens are special, so it's not going to magically distinguish array commas from polygon commas for you. BTW, if you are using 7.4, the ARRAY[] constructor syntax might be easier to use. regards, tom lane
Thanks to you both that helped enormously, Dave ----- Original Message ----- From: "Joe Conway" <mail@joeconway.com> To: "Tom Lane" <tgl@sss.pgh.pa.us> Cc: "David" <de4@kent.ac.uk>; <pgsql-sql@postgresql.org> Sent: Friday, February 13, 2004 4:33 PM Subject: Re: [SQL] arrays and polygons > Tom Lane wrote: > > "David" <de4@kent.ac.uk> writes: > >>INSERT INTO species (location) VALUES ('{((432,89), (45,87), (89,87)), > >>((54,78), (34,98))}; > > > > I think you'd need to double-quote each polygon within the array > > literal. > > > > '{"((432,89), (45,87), (89,87))", "..."}' > > > > The array parser doesn't think parens are special, so it's not going to > > magically distinguish array commas from polygon commas for you. > > > > BTW, if you are using 7.4, the ARRAY[] constructor syntax might be > > easier to use. > > FWIW, here's what it would look like in 7.4.x: > > regression=# select ARRAY['((432,89), (45,87), (89,87))'::polygon, > '((432,89), (45,87), (89,87))']; > array > ------------------------------------------------------------- > {"((432,89),(45,87),(89,87))","((432,89),(45,87),(89,87))"} > (1 row) > > You need to explicitly cast at least the first polygon in order to get > an array of polygons (versus an array of text). > > HTH, > > Joe >
Tom Lane wrote: > "David" <de4@kent.ac.uk> writes: >>INSERT INTO species (location) VALUES ('{((432,89), (45,87), (89,87)), >>((54,78), (34,98))}; > > I think you'd need to double-quote each polygon within the array > literal. > > '{"((432,89), (45,87), (89,87))", "..."}' > > The array parser doesn't think parens are special, so it's not going to > magically distinguish array commas from polygon commas for you. > > BTW, if you are using 7.4, the ARRAY[] constructor syntax might be > easier to use. FWIW, here's what it would look like in 7.4.x: regression=# select ARRAY['((432,89), (45,87), (89,87))'::polygon, '((432,89), (45,87), (89,87))']; array ------------------------------------------------------------- {"((432,89),(45,87),(89,87))","((432,89),(45,87),(89,87))"} (1 row) You need to explicitly cast at least the first polygon in order to get an array of polygons (versus an array of text). HTH, Joe