генерировать JSON в PostgreSQL


У меня есть postgreSQL 8.4+PostGIS 1.5.

Я хочу создать GeoJson. Я делаю:

SELECT row_to_json(fc)
 FROM ( SELECT 'FeatureCollection' As type, array_to_json(array_agg(f)) As features
 FROM (SELECT 'Feature' As type
, ST_AsGeoJSON(lg.the_geom)::json As geometry
, row_to_json(lp) As properties
   FROM parcels_temp As lg 
     INNER JOIN (SELECT num, cadastr FROM parcels_temp) As lp 
   ON lg.num = lp.num  ) As f )  As fc;

Но получаем ошибку:

 ERROR:  type "json" does not exist
 LINE 4:     , ST_AsGeoJSON(lg.the_geom)::json As geometry

Что я делаю не так?

1 2

1 ответ:

В PostgreSQL 8.4 нет типа данных json. Тип был введен в 9.2, хотя был создан обратный порт в 9.1; см. этот bitbucket.

Используйте text. json является просто проверяющей оболочкой вокруг типа text в любом случае, интересным битом являются функции типа row_to_json - которые также недоступны для 8.4.

Если вы не можете использовать text - скажем, потому что вы используете сторонний код, который ожидает json, или потому что вам нужны функции json-тогда пришло время обновление PostgreSQL. 8.4 в любом случае становится довольно пожилым, Как и PostGIS 1.5.