0

我在与PG::prepare,ST_GeomFromTextPOINT.

这有效:

sql = %Q%insert into #{table_name} (latlong, place_name) values (ST_GeomFromText('POINT(0 0)', 4326), $1 )%

conn.prepare('statement1', sql)

不起作用

sql = %Q%insert into #{table_name} (latlong, place_name) values (ST_GeomFromText('POINT($1 $2)', 4326), $3 )%

conn.prepare('statement1', sql)

错误:

in `prepare': ERROR:  could not determine data type of parameter $1 (PG::IndeterminateDatatype)
4

1 回答 1

2

而不是这个:

sql = %Q%insert into #{table_name} (latlong, place_name) values (ST_GeomFromText('POINT($1 $2)', 4326), $3 )%
conn.prepare('statement1', sql)

尝试这个:

sql = %Q%insert into #{table_name} (latlong, place_name) values (ST_GeomFromText($1, 4326))%
conn.prepare('statement1', sql)

在此示例中,POINT(long lat)字符串表示为单个值。$1

CONN.exec_prepared( 'statement1', [ "POINT(long lat)", foobar ]

当 PostGIS 尝试解析您的上述语句时,就会出现整个问题,它会尝试创建一个$1 $2根本不起作用的几何图形,并为您提供您现在熟悉的错误。而是在准备好语句后将 WKT(众所周知的文本)POINT(long lat)作为单个值传递。

于 2013-09-08T20:18:36.683 回答