gpt4 book ai didi

postgresql - 如何报告在 Postgres/plpgsql 中发生错误的行?

转载 作者:行者123 更新时间:2023-11-29 11:26:59 24 4
gpt4 key购买 nike

我一直在 postgres 中使用或多或少类似的东西来模拟在 SQL Server 中我如何使用 Try/Catch block 和事务,如果发现错误可以在 Catch 中回滚:

do $$
begin
[SQL here]

exception when others then
raise notice 'Error in insert statement ---> % %', SQLERRM, SQLSTATE LINE;
end;

$$ language 'plpgsql';

有没有办法报告发生错误的行,比如“ERROR_LINE()?

提前致谢

最佳答案

在一些现代 PostgreSQL 上,您可以使用 GET STACKED DIAGNOSTICS 语句。无法获取 linenumber,但您可以获得调用上下文,其中包含 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

关于postgresql - 如何报告在 Postgres/plpgsql 中发生错误的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30631735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com