我需要在postgres数据库中插入/更新点列类型。
我使用node-postgres
使用POSTGRES管理面板生成的脚本将更新查询显示为UPDATE public.places SET id=?, user_id=?, business_name=?, alternate_name=?, primary_category=?, categories=?, description=?, address=?, city=?, state=?, country=?, zip=?, point WHERE <condition>;
如何从经纬度获得点?
我已经看到了几个答案使用POSTGIS,但无法让它工作。
在POSTGRES(https://www.postgresql.org/docs/9.2/static/xfunc-sql.html)的文档中提到我们可以使用point '(2,1)'
,但这不适用于pg查询。
我现在拥有的:
var config = {
user: 'postgres',
database: 'PGDATABASE',
password: 'PGPASSWORD!',
host: 'localhost',
port: 5432,
max: 10,
idleTimeoutMillis: 30000
};
更新部分:
app.post('/updatePlaces', function(req, res, next) {
console.log("Update");
console.log(req.body.places);
pool.query('UPDATE places SET address = $1, alternate_name = $2, business_name = $3, categories = $4, city = $5, country = $6, description = $7, point = $8, primary_category = $9, state = $10, zip = $11', [req.body.places.address, req.body.places.alternate_name, req.body.places.business_name, req.body.places.categories, req.body.places.city, req.body.places.country, req.body.places.description, (req.body.places.point.x, req.body.places.point.y), req.body.places.primary_category, req.body.places.state, req.body.places.zip], function(err, result) {
if(err) {
console.log(err);
return err;
}
res.send(result.rows[0]);
});
});
尝试了许多不同的方法来传递点:
1.(req.body.places.点x,要求body.places.点y)
1.点(要求体)places.point.x,要求体places.point.y)
1.点'(2,1)'
以上所有的错误都是错误的。我需要使用POSTGIS吗?
5条答案
按热度按时间ocebsuys1#
如果你“直接”写SQL,这是可行的:
结果
ubof19bj2#
经过几次组合,发现这个工作。!!
( '(' + req.body.places.point.x + ',' + req.body.places.point.y +')' )
如果有人试图只使用
node-postgres
来做这件事,则作为答案发布。所以你可以使用单引号:
insert into x values ( '(1,2)' );
但是在查询中使用
insert into x values (point(1,2));
不起作用。vbkedwbf3#
我最近在使用
node-postgres
时遇到了一个类似的问题,当插入带有地理(点)列的postgis
数据库时。我的解决方案是用途:cigdeys34#
当前版本(Postgres 12,第8页)应该可以简单地使用Postgres的POINT函数来设置点列值。
示例:
结果:
jhdbpxl95#
如果您使用的是pg-promise,则可以自动设置自定义类型的格式,请参阅自定义类型格式设置。
你可以像这样介绍你自己的类型:
在某个时候,您可以创建对象:
然后你可以使用这些变量作为正则类型:
另请参见:几何构造器。