首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理来自C函数的异常

处理来自C函数的异常
EN

Stack Overflow用户
提问于 2013-04-18 15:51:27
回答 1查看 362关注 0票数 0

我有一个函数正在调用C库中的一个函数。有没有什么办法可以捕获调用C函数的Postgres函数的异常?

下面是我要调用的函数:

代码语言:javascript
复制
-- 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.';

下面是我调用它的函数:

代码语言:javascript
复制
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中调用它的方式:

代码语言:javascript
复制
UPDATE "test_layer" SET the_geom = mango_repair(the_geom) WHERE NOT ST_IsValid(the_geom);

当我运行这个SQL时,我得到了以下错误,并且mango_repair函数没有像预期的那样进入异常块。

下面是我收到的错误消息:

代码语言:javascript
复制
ERROR:  Geometry type (MultiLineString) does not match column type (MultiPolygon)


********** Error **********

ERROR: Geometry type (MultiLineString) does not match column type (MultiPolygon)
SQL state: 22023
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-18 16:11:00

如果我猜对了您的意思,那么我怀疑您在C中实现了一个引发PostgreSQL异常的PostgreSQL函数。如果是这样,您就不能在普通SQL中捕获和处理它--但是您可以使用PL/PgSQL BEGIN ... EXCEPTION块。有关其异常处理功能的详细信息,请参阅PL/PgSQL文档。

进一步的讨论表明,真正的问题与异常处理无关,实际上是调用该函数的UPDATE查询中的几何类型之间的不匹配。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16077364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档