pg-promise使用geom和json列进行多行更新

时间:2017-11-02 20:18:28

标签: javascript pg-promise

我喜欢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是什么,所以我可以看到发生了什么。

1 个答案:

答案 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