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