如何打印代码,PostgreSQL / plpgsql异常的类型

时间:2017-06-17 15:52:46

标签: postgresql exception error-handling

鉴于此pl / pgSQL函数

drop function if exists f( float );
create function f( x float )
  returns float
  language plpgsql
  as $$
    begin
      return 1 / x;
    exception
      when others then
        raise notice 'oops';
        return 0::float;
    end;
  $$;

很明显,select f( 0 );会导致代码22012异常,类型为division_by_zero。知道了这一点,我可以将exception子句的选择器缩小到when division_by_zero then ...

但是,对于任意函数,如何获取错误类型?有什么比较,比方说,raise notice error.code

1 个答案:

答案 0 :(得分:2)

使用sqlstate,例如:

drop function if exists f( float );
create function f( x float )
  returns float
  language plpgsql
  as $$
    begin
      return 1 / x;
    exception
      when others then
        raise notice 'oops %', sqlstate;
        return 0::float;
    end;
$$;

select f(0);

NOTICE:  oops 22012
 f 
---
 0
(1 row) 

详细了解Errors and MessagesTrapping Errors.