我喜欢pg-promise,但我很难在包含geom和json列的表中插入多行。我不确定语法。
我希望能够传入一个对象数组,例如:
[{pt_title: 'title1',
lat: -42.360061,
lng: -71.065567,
waypoints:[[42.360061,-71.065567],[42.360061,-71.06549]]},
{pt_title: 'title2',
lat: -43.360061,
lng: -71.065567,
waypoints:[[43.360061,-71.065567],[42.360061,-71.06549]]}]
并更新我的桌点:
pt_title varchar,
pt_geom geom,
waypoints json
因此我必须转换lat和lng值,如下所示:
ST_GeomFromText(POINT(${pt.lng} ${pt.lat}), 4326)
并在更新前将waypoints数组转换为json。
CAST(pt.waypoints AS json)
我读过有关使用更新助手的信息,但找不到任何gis列的示例。我无法弄清楚如何设置列集以便它知道转换?
此外,是否有一个帮助程序实用程序,所以我可以看到生成的SQL字符串
使用db.none(sql, values)
语法?我想看看插入值的最终SQL是什么,所以我可以看到发生了什么。
答案 0 :(得分:0)
我无法确定如何设置列集,以便了解转换?
每个Column中的init
个属性是您的转化回调。
这是您的完整ColumnSet对象:
const cs = new pgp.helpers.ColumnSet([
'pt_title',
{
name: 'pt_geom',
mod: ':raw',
init: c => pgp.as.format('ST_GeomFromText(POINT(${lng}, ${lat}), 4326)', c.source)
},
'waypoints:json'
], {table: 'my-table'});
另外,是否有一个辅助工具,所以我可以看到生成的SQL字符串......?
请参阅pg-monitor,或只处理事件query。