0
我有一个函数从C库调用函数。无论如何,我可以从调用C函数的Postgres函数中捕获该异常?从C函数处理异常
下面是我打电话的功能:
-- 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功能不进入抗辩N块如预期。
下面是我收到错误消息:
ERROR: Geometry type (MultiLineString) does not match column type (MultiPolygon)
********** Error **********
ERROR: Geometry type (MultiLineString) does not match column type (MultiPolygon)
SQL state: 22023
我已经试过用下面的函数做这件事,但它从来没有进入异常块:http://pastebin.com/egeAmepD – ChrisInCambo
我也尝试在BEGIN/EXCEPTION块中包装ST_MakeValid调用,但没有要么提醒通知。我哪里错了? – ChrisInCambo
@ChrisInCambo这些是在你的问题中提到的有用的细节。请修改您的问题 - 在您的问题中,添加您正在获取的错误消息**和您的PostgreSQL版本**的完整准确文本。现在解释你的问题涉及到太多的猜测。请提供*详细信息* - 你的函数是什么,这个“C语言”函数是什么等等。我猜对了,你正在谈论一个简单的PostGIS C函数,可以从SQL调用,还是这是别的? –