При попадании квартала в существующий район - через триггер присваивать значения поля внешнего ключа 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();