Node.js使用pg库向PostgreSQL插入Polygon的预编译语句报错求解
错误原因
pg库的预编译参数会自动对所有传入值做转义处理,你将ST_Polygon函数整体作为字符串传入$4参数时,数据库不会将其识别为SQL函数执行,只会把整段字符串作为geometry类型的输入值解析,因此会触发几何格式解析错误。
解决方案
把PostGIS函数逻辑写到预编译SQL模板中,仅将动态变化的几何文本、SRID作为参数传入即可,修改后的代码如下:
- 修改预编译SQL语句,将ST_Polygon逻辑内嵌到模板里
const sql = "INSERT INTO assets (title, id, duration, geodata, genre) VALUES($1, $2, $3, ST_Polygon($4::geometry, 4326), $5);"
- 调整传入的
poly_string值,仅保留LINESTRING的WKT文本即可,不需要包裹ST_Polygon函数:
// 调整后的poly_string const poly_string = "LINESTRING(16 14, 20 14, 20 12, 16 12, 16 14)" const values = [title, crid, duration, poly_string, genre]
补充说明
预编译语句的参数仅支持传入值类内容,不能传入SQL函数、关键字、表/字段名这类SQL语法结构,这是预编译机制防止SQL注入的原生特性,并非故障。
内容的提问来源于stack exchange,提问作者Oivalf
相关产品推荐
相关产品推荐

