Страница 1 из 1

Триггер BEFORE INSERT на проверку вложенности геометрии

Добавлено: 16 ноя 2012, 14:27
dab
Задача при создании новой геометрии квартала проверять на вложенность его в определенный район.
При попадании квартала в существующий район - через триггер присваивать значения поля внешнего ключа id_rayon. Используются схемы соответствующие местным системам координат, поэтому присутствует TG_TABLE_SCHEMA.
Вопрос:
В коде функции public.kvr_ins можно ли как-то обойтись без st_astext() и public.st_geomfromtext(), а значение NEW.geom сразу использовать в SELECT?
PostgreSQL 9.1.5, compiled by Visual C++ build 1500, 64-bit

Код: Выделить всё

CREATE OR REPLACE FUNCTION public.kvr_ins ()
RETURNS trigger AS
$body$
DECLARE
  id_rn INTEGER;
  textg VARCHAR;
BEGIN
  IF NEW.id_rayon IS NULL THEN
    textg = public.st_astext(NEW.geom);
    EXECUTE 'SELECT '||quote_ident(TG_TABLE_SCHEMA)||'.rayon.id FROM '||quote_ident(TG_TABLE_SCHEMA)||'.rayon '||
      'WHERE public.st_within(public.st_geomfromtext('||quote_literal(textg)||'), ' || quote_ident(TG_TABLE_SCHEMA) || '.rayon.geom)' INTO id_rn;      
    NEW.id_rayon = id_rn;
  END IF;  
  RETURN NEW;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;

CREATE TRIGGER kvartal_tri
  BEFORE INSERT 
  ON msk5603.kvartal FOR EACH ROW 
  EXECUTE PROCEDURE public.kvr_ins();