Эффективный способ проверки типа геометрии и SRID таблицы в функции Postgres - PullRequest
0 голосов
/ 19 июня 2020

Я пишу postgres функцию для выполнения некоторых пространственных вычислений.

Мне нужно отлавливать ошибки неправильной геометрии и несовпадающих SRID из двух таблиц, которые являются аргументами функции.

приведенный ниже код работает, но кажется плохим способом добиться этого.

-- check the geometries in each table
EXECUTE format('SELECT DISTINCT ST_GeometryType(geom) FROM %s', master_table)
INTO master_type_holder;

IF master_type_holder != 'ST_Polygon' THEN
   RAISE EXCEPTION 'master table geometries must be type ST_Polygon';
END IF;

EXECUTE format('SELECT DISTINCT ST_GeometryType(geom) FROM %s', ref_table)
INTO ref_type_holder;

IF ref_type_holder != 'ST_Polygon' THEN
   RAISE EXCEPTION 'Reference table geometries must be type ST_Polygon';
END IF;

Спасибо за любые предложения

1 Ответ

2 голосов
/ 19 июня 2020

Поскольку вы ожидаете, что все записи будут одного типа, самым быстрым и безопасным было бы ограничить столбец правильным типом и просто убедиться, что столбец имеет правильный тип

CREATE TABLE test (id integer, geom geometry(polygon,4326));


SELECT * 
FROM geometry_columns 
WHERE f_table_name = 'test'
AND type = 'POLYGON' and srid = 4326;
...