San*_*ani 5 postgresql error-handling plpgsql
我一直在postgres中使用或多或少这样的东西来模拟如何在SQL Server中使用Try/Catch块,如果发现错误,可以在Catch中回滚事务:
do $$
begin
[SQL here]
exception when others then
raise notice 'Error in insert statement ---> % %', SQLERRM, SQLSTATE LINE;
end;
$$ language 'plpgsql';
Run Code Online (Sandbox Code Playgroud)
有没有办法报告发生错误的行,如"ERROR_LINE()?
提前致谢
在一些现代的PostgreSQL上,您可以使用GET STACKED DIAGNOSTICS
语句.不可能得到亚麻,但你可以获得一个调用上下文,其中包含lineno:
postgres=> DO $$
DECLARE
a int DEFAULT 0;
_c text;
BEGIN
BEGIN
PERFORM 10/a;
EXCEPTION WHEN OTHERS THEN
GET STACKED DIAGNOSTICS _c = PG_EXCEPTION_CONTEXT;
RAISE NOTICE 'context: >>%<<', _c;
END;
END;
$$;
NOTICE: 00000: context: >>SQL statement "SELECT 10/a"
PL/pgSQL function inline_code_block line 7 at PERFORM<<
LOCATION: exec_stmt_raise, pl_exec.c:3041
DO
Run Code Online (Sandbox Code Playgroud)