C ライブラリから関数を呼び出す関数があります。C関数を呼び出しているPostgres関数からその例外をキャッチできる方法はありますか?
私が呼んでいる関数は次のとおりです。
-- Function: public.st_makevalid(geometry)
-- DROP FUNCTION public.st_makevalid(geometry);
CREATE OR REPLACE FUNCTION public.st_makevalid(geometry)
RETURNS geometry AS
'$libdir/postgis-2.0', 'ST_MakeValid'
LANGUAGE c IMMUTABLE STRICT
COST 100;
ALTER FUNCTION public.st_makevalid(geometry) OWNER TO postgres;
COMMENT ON FUNCTION public.st_makevalid(geometry) IS 'args: input - Attempts to make an invalid geometry valid w/out loosing vertices.';
これが私がそれを呼び出している関数です:
CREATE OR REPLACE FUNCTION public.mango_repair(geometry)
RETURNS geometry AS
$BODY$
DECLARE
the_geom geometry := $1;
reason text := ST_IsValidReason(the_geom);
BEGIN
IF reason LIKE 'Self-intersection%' THEN
the_geom = ST_MakeValid(ST_Boundary(the_geom));
END IF;
RETURN the_geom;
EXCEPTION
WHEN OTHERS THEN
RAISE NOTICE 'something went wrong';
RETURN the_geom;
END;
$BODY$
LANGUAGE plpgsql STABLE STRICT
COST 100;
ALTER FUNCTION public.mango_repair(geometry) OWNER TO postgres;
そして、SQLから呼び出す方法は次のとおりです。
UPDATE "test_layer" SET the_geom = mango_repair(the_geom) WHERE NOT ST_IsValid(the_geom);
その SQL を実行すると、次のエラーが発生し、mango_repair 関数が期待どおりに EXCEPTION ブロックに入りません。
私が受け取っているエラーメッセージは次のとおりです。
ERROR: Geometry type (MultiLineString) does not match column type (MultiPolygon)
********** Error **********
ERROR: Geometry type (MultiLineString) does not match column type (MultiPolygon)
SQL state: 22023