Pergunta

I have this (non working) query:

"INSERT INTO notes (
         lat, 
         lng, 
         point)
      VALUES (
         :lat,
         :lng,
         ST_GeometryFromText('POINT(:lat :lng)'))"

Which I am running against this table:

CREATE TABLE notes
(
  id serial NOT NULL,
  lat real NOT NULL,
  lng real NOT NULL,
  point point NOT NULL,
  CONSTRAINT notes_pkey PRIMARY KEY (id )
)

The query is prepared with PDO (php) but that is not the point I think. The result I get back is an exception claiming that:

SQLSTATE[42804]: Datatype mismatch: 7 ERROR:  column "point" is of type point but expression is of type geometry
LINE 8:          $8, $9, $10, $11, $12, ST_GeometryFromText('POINT(:...
                                        ^
HINT:  You will need to rewrite or cast the expression.

How can I cast the expression as suggested?

Foi útil?

Solução

Looks like you are using the standard Postgres type point:

"INSERT INTO notes (lat, lng, point)
 VALUES (:lat, :lng, '(:lat, :lng)'::point)"

You may want to use the PostGis type geometry in your table instead.

Outras dicas

It's not clear if you want to use PostgreSQL's point type, or PostGIS's geometry type. If it is the later, this answer should help out.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top