我遇到与PG::prepare
,ST_GeomFromText
和POINT
相关的语法时遇到问题。
这有效:
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)
答案 0 :(得分: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)
作为单个值传递。