我有这个Postgres/PostGIS查询:
UPDATE raw.geocoding
SET the_geom = ST_Transform(ST_GeomFromText('POINT(((E'-96.6864379495382')::float8) ((E'32.792527154088')::float8))', 4326),3081)
WHERE id=((10793455)::int4)
当我运行它时,我得到这个错误:
ERROR: syntax error at or near "')::float8) ((E'"
LINE 2: ...sform(ST_GeomFromText('POINT(((E'-96.6864379495382')::float8...
^
********** Error **********
ERROR: syntax error at or near "')::float8) ((E'"
SQL state: 42601
Character: 94
我很困惑,因为PostGIS没有转义数据(for example)的问题,而且查询是基于以下参数化查询从npgsql生成的:
UPDATE raw.geocoding
SET the_geom = ST_Transform(ST_GeomFromText('POINT(:longitude :latitude)', 4326),3081)
WHERE id=:id
我正在运行Postgres 9.1.5和PostGIS 2.0.1。
1条答案
按热度按时间ippsafx71#
该错误是由字符串中的未转义单引号引起的。标准方法是将它们连双:
这将修复字符串文字,但会出现更多错误。
就像@Paul在注解中暗示的那样,
ST_GeomFromText()
需要几何WKTPOINT(0 0)
。显式强制转换为float8
使它看起来像是您正在尝试输入Postgres函数point()
(一开始让我感到困惑)。简化为:还要注意,我在第二个例子中是如何使用美元引号来避免对单引号进行转义的。由于在修改语法后,字符串文字中没有任何单引号,因此您还可以再次使用单引号。您的参数化查询:
你可以给
geometry
添加一个强制类型来使它更清晰,就像@Paul在他的评论中建议的那样。