RAISE NOTICE
postgres=# CREATE OR REPLACE FUNCTION f28() RETURNS VOID ASpostgres-# $$postgres$# DECLAREpostgres$# v_int INTEGER := 1;postgres$# BEGINpostgres$# RAISE NOTICE 'v_int = %, 随机数 = %',v_int,random();postgres$# END;postgres$# $$postgres-# LANGUAGE plpgsql;CREATE FUNCTIONpostgres=# SELECT f28();NOTICE: v_int = 1, 随机数 = 0.236714988015592f28-----(1 row)
使用 raise notice 向终端输出一个消息,也有可能写到日志中(需要调整日志的保存级别)。
RAISE EXCEPTION
postgres=# CREATE OR REPLACE FUNCTION f28() RETURNS VOID ASpostgres-# $$postgres$# DECLAREpostgres$# v_int INTEGER := 1;postgres$# BEGINpostgres$# RAISE EXCEPTION '程序EXCEPTION ';postgres$# --下面的语句不会再执行postgres$# RAISE NOTICE 'v_int = %, 随机数 = %',v_int,random();postgres$# END;postgres$# $$postgres-# LANGUAGE plpgsql;CREATE FUNCTIONpostgres=# SELECT f28();ERROR: 程序EXCEPTION
如果在事务中执行这个函数,则事务会终止(abort)。
RAISE EXCEPTION 自定义 ERRCODE
postgres=# CREATE OR REPLACE FUNCTION f28() RETURNS VOID ASpostgres-# $$postgres$# DECLAREpostgres$# v_int INTEGER := 1;postgres$# BEGINpostgres$# RAISE EXCEPTION ' 程序EXCEPTION ' USING ERRCODE = '23505';postgres$# END;postgres$# $$postgres-# LANGUAGE plpgsql;CREATE FUNCTIONpostgres=# SELECT f28();ERROR: 程序EXCEPTION
日志中会记录这个 ERRCODE。
2017-10-03 18:40:16.710 CST,"pgxz","postgres",15072,"[local]",59d33b65.3ae0,225,"idle",2017-10-03 15:25:25 CST,4/367159,0,LOG,00000,"statement: SELECT f28();",,,,,,,,,"psql"2017-10-03 18:40:16.710 CST,"pgxz","postgres",15072,"[local]",59d33b65.3ae0,226,"SELECT",2017-10-03 15:25:25 CST,4/367159,0,ERROR,23505," 程序EXCEPTION ",,,,,,,,,"psql"