ST_Area не существует Heroku Postgresql Postgis

#sql #postgresql #heroku #postgis #heroku-postgres

#sql #postgresql #heroku #postgis #heroku-postgres

Вопрос:

У меня есть Postgres, расширенный базой данных Postgis версии 2.5 в Heroku.

Я хочу использовать функцию:

ST_Area( a_polygon )

В частности, мне нужен сгенерированный столбец в моей таблице: alter table buildings add building_area float generated always as ( st_area( base_polygon ) ) stored;

Где base_polygon имеет тип polygon .

Однако я получаю эту ошибку:

ОШИБКА: функция st_area(полигон) не существует Подсказка: ни одна функция не соответствует заданному имени и типам аргументов. Возможно, вам потребуется добавить явные приведения типов.

Разве эти команды не должны быть доступны после запуска CREATE EXTENSION postgis ?

Или есть что-то еще, что я должен сделать?

Ответ №1:

Похоже, что ваш тип данных столбца polygon — это база postgre, построенная в polygon.

ST_Area ожидает тип геометрии postgis в качестве параметра.

Как в этом примере из документов https://postgis.net/docs/ST_Area.html

 select ST_Area(geom) sqft,
ST_Area(ST_Transform(geom, 26986)) As sqm
from (
     select
         'SRID=2249;POLYGON((743238 2967416,743238 2967450,
         743265 2967450,743265.625 2967416,743238 2967416))' :: geometry 
      geom
 ) subquery;
 

Проверьте, работает ли этот пример, это означает, что функция ST_Area существует.

Вы можете добавить столбец с типом геометрии postgis. https://postgis.net/docs/AddGeometryColumn.html

 SELECT AddGeometryColumn ('my_schema','my_spatial_table','geom',4326,'POLYGON',2);
 

Затем преобразуйте ваши полигоны в формат postgis с помощью функций postgis.

Например https://postgis.net/docs/ST_MakePolygon.html

 SELECT ST_MakePolygon( ST_GeomFromText('LINESTRING(75 29,77 29,77 29, 75 29)'));
 

Комментарии:

1. Можно напрямую преобразовать a polygon в a geometry (например: select '((0,0),(0,10),(10,10),(10,0),(0,0))'::polygon::geometry; )