You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js使用pg库向PostgreSQL插入Polygon的预编译语句报错求解

错误原因

pg库的预编译参数会自动对所有传入值做转义处理,你将ST_Polygon函数整体作为字符串传入$4参数时,数据库不会将其识别为SQL函数执行,只会把整段字符串作为geometry类型的输入值解析,因此会触发几何格式解析错误。

解决方案

把PostGIS函数逻辑写到预编译SQL模板中,仅将动态变化的几何文本、SRID作为参数传入即可,修改后的代码如下:

  1. 修改预编译SQL语句,将ST_Polygon逻辑内嵌到模板里
const sql = "INSERT INTO assets (title, id, duration, geodata, genre) VALUES($1, $2, $3, ST_Polygon($4::geometry, 4326), $5);"
  1. 调整传入的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:45:02