Postgresql 使用PostgREST插入/更新PostGIS几何图形列

Postgresql 使用PostgREST插入/更新PostGIS几何图形列,postgresql,geometry,postgis,postgrest,Postgresql,Geometry,Postgis,Postgrest,我使用PostgreSQL 12.1、PostGIS 3.0.0和PostgREST 7.0.1的组合,我对这种设置非常满意。有一个更广泛的开放增强,我期待着它 我有一个带有几何图形列的表: CREATE TABLE places ( id serial primary key, geometry geometry(GEOMETRY,4326) ); 使用SQL,我可以插入纬度57.20和经度17.45的点,如下所示: insert into places(geometry) valu

我使用PostgreSQL 12.1、PostGIS 3.0.0和PostgREST 7.0.1的组合,我对这种设置非常满意。有一个更广泛的开放增强,我期待着它

我有一个带有几何图形列的表:

CREATE TABLE places (
  id serial primary key,
  geometry geometry(GEOMETRY,4326)
);
使用SQL,我可以插入纬度57.20和经度17.45的点,如下所示:

insert into places(geometry) values (ST_GeomFromText('POINT(17.45 57.20)', 4326));
使用PostgREST查询时,它表示为GeoJSON:

GET /places?id=eq.6317&select=geometry

[{
  "geometry": {
    "type": "Point",
    "coordinates": [17.45,57.2]
  }
}]
但是我需要如何表示几何体,以便使用PostgREST插入/更新

使用GeoJSON会导致500内部服务器错误:

POST /places

{
    "geometry": {
        "type": "Point",
        "coordinates": [17.45,57.2]
    }
}

500 Internal Server Error

{
    "hint": "\"{\r\" <-- parse error at position 2 within geometry",
    "details": null,
    "code": "XX000",
    "message": "parse error - invalid geometry"
}

是否有其他文本表示法可以工作,或者是否有将ST_GeomFromText之类的函数传递到PostgREST的一般可能性?任何提示都非常感谢

最简单的方法是使用
几何体
文字表示法:

POST /places

{
  "geometry": "SRID=4326;POINT(17.45 57.2)"
}
(您可以省略SRID)

这是有效的,因为这也有效:

选择'SRID=4326;点(54.729142 25.268204)∶几何图形
--结果:0101000020E610000ED116A86545D4B4009A87004A9443940

另一种方法是在插入触发器之前处理json数组

我下面的答案对你有用吗?这非常有效,谢谢你,史蒂夫!我需要保留SRID,否则我得到的几何体SRID(0)与列SRID(4326)不匹配。
POST /places

{
    "geometry": "0101000020E610000033333333337331409A99999999994C40"
}

201 Created
POST /places

{
  "geometry": "SRID=4326;POINT(17.45 57.2)"
}