消息及异常输出

最近更新时间:2023-07-20 10:49:02

我的收藏

RAISE NOTICE

postgres=# CREATE OR REPLACE FUNCTION f28() RETURNS VOID AS
postgres-# $$
postgres$# DECLARE
postgres$# v_int INTEGER := 1;
postgres$# BEGIN
postgres$# RAISE NOTICE 'v_int = %, 随机数 = %',v_int,random();
postgres$# END;
postgres$# $$
postgres-# LANGUAGE plpgsql;
CREATE FUNCTION
postgres=# SELECT f28();
NOTICE: v_int = 1, 随机数 = 0.236714988015592
f28
-----

(1 row)
使用 raise notice 向终端输出一个消息,也有可能写到日志中(需要调整日志的保存级别)。

RAISE EXCEPTION

postgres=# CREATE OR REPLACE FUNCTION f28() RETURNS VOID AS
postgres-# $$
postgres$# DECLARE
postgres$# v_int INTEGER := 1;
postgres$# BEGIN
postgres$# RAISE EXCEPTION '程序EXCEPTION ';
postgres$# --下面的语句不会再执行
postgres$# RAISE NOTICE 'v_int = %, 随机数 = %',v_int,random();
postgres$# END;
postgres$# $$
postgres-# LANGUAGE plpgsql;
CREATE FUNCTION
postgres=# SELECT f28();
ERROR: 程序EXCEPTION
如果在事务中执行这个函数,则事务会终止(abort)。

RAISE EXCEPTION 自定义 ERRCODE

postgres=# CREATE OR REPLACE FUNCTION f28() RETURNS VOID AS
postgres-# $$
postgres$# DECLARE
postgres$# v_int INTEGER := 1;
postgres$# BEGIN
postgres$# RAISE EXCEPTION ' 程序EXCEPTION ' USING ERRCODE = '23505';
postgres$# END;
postgres$# $$
postgres-# LANGUAGE plpgsql;
CREATE FUNCTION
postgres=# 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"