有什么方法可以看到postgresql中的错误信息吗?

czq61nw1  于 2023-03-17  发布在  PostgreSQL
关注(0)|答案(1)|浏览(223)

我是新使用PostgreSQL,我正在寻找更多关于错误的信息,例如,如果我运行以下命令:

select top 10 * from TABLE

我得到这个错误:

ERROR:  syntax error at or near "10"
LINE 2: select top 10 * from TABLE
                   ^
SQL state: 42601
Character: 13

我期待得到更多的东西。所以,我已经尝试了这个从这里https://www.postgresql.org/docs/current/plpgsql-control-structures.html#PLPGSQL-EXCEPTION-DIAGNOSTICS-VALUES,但不工作(或者我不知道如何使用它):

DECLARE
  text_var1 text;
  text_var2 text;
  text_var3 text;
BEGIN
   SELECT TOP 10 * FROM tbl;  -- obviously incorrect

EXCEPTION WHEN OTHERS THEN
  GET STACKED DIAGNOSTICS text_var1 = MESSAGE_TEXT,
                          text_var2 = PG_EXCEPTION_DETAIL,
                          text_var3 = PG_EXCEPTION_HINT;
END;
58wvjzkj

58wvjzkj1#

PL/pgSQL代码块的问题在于,它在进行表面语法检查时就失败了,甚至在执行任何代码 * 之前 * 就已经引发了异常。
要运行测试,您可以使用EXECUTE中的动态SQL代码偷偷地让已损坏的语句通过表面语法检查,然后实际执行该语句并引发预期错误,您可以使用EXCEPTION子句捕获该错误。例如:

DO
$do$
DECLARE
   text_var1 text;
   text_var2 text;
   text_var3 text;
   text_var4 text;
BEGIN
   EXECUTE 'SELECT TOP 10 * FROM tbl';

EXCEPTION WHEN others THEN
   GET stacked DIAGNOSTICS text_var1 = MESSAGE_TEXT,
                           text_var2 = PG_EXCEPTION_DETAIL,
                           text_var3 = PG_EXCEPTION_HINT,
                           text_var4 = PG_EXCEPTION_CONTEXT;
   RAISE EXCEPTION E'My custom err msg:\n%\n%\n%\n%'
                 , text_var1, text_var2, text_var3, text_var4;
   -- or whatever you want to do here ...
END
$do$

也就是说,除了从显示的原始错误消息中看到的内容外,您不会了解到更多信息。

相关问题