在 postgres 中打印运行时消息

问题描述 投票:0回答:5

我们可以在 postgres 中使用

RAISE NOTICE
相当于 SQL Server 中的
RAISERROR
“要显示的消息”
WITH NOWAIT
,还是有更好的方法在 postgres 查询运行时打印中间消息?请建议是否有更好的方法在 postgres 中打印运行时消息。

INSERT INTO tbl1 (col1) values (val1);
DO $$
begin
raise notice 'insert tbl1 done!';
end;
$$;
UPDATE tbl2 set col2='val2' where ...;
DO $$
begin
raise notice 'update tbl2 done!';
end;
$$;

如果这段代码太糟糕而无法评论,我深表歉意,请建议更好的方法,谢谢

sql sql-server postgresql
5个回答
76
投票

是的,您可以像下面一样使用

RAISE NOTICE
。你的做法是正确的。

RAISE NOTICE 'i want to print % and %', var1,var2;

请参阅此处了解更多信息https://www.postgresql.org/docs/current/static/plpgsql-errors-and-messages.html

编辑:

begin
INSERT INTO tbl1 (col1) values (val1);
raise notice 'insert tbl1 done!';
end;

13
投票

您可以在函数中的任何地方使用非常简单的语句。

DO $$ begin raise notice '%',now(); end; $$;

参考功能:

create or replace function test() RETURNS bool AS '
begin
raise notice ''%'',now();
for i IN 0..50000000  loop
     end loop
     raise notice ''%'',now();
     return true;
end;

语言“plpgsql”;


4
投票

您也可以在没有

DO
块的情况下进行正常选择。

INSERT INTO tbl1 (col1) values (val1);

SELECT 'insert tbl1 done!' as msg;

UPDATE tbl2 set col2='val2' where ...;

SELECT 'update tbl2 done!' as msg;

权衡是它确实会给输出增加额外的混乱,比如

UPDATE 1
      msg
-----------------
update tbl2 done!
(1 row)

2
投票

RAISE NOTICE 是 PL/pgSQL 的一部分,因此它仅在函数或匿名 DO 块中合法。我想你可以创建一个发出通知的函数并调用它。


0
投票

不确定这是否是您正在寻找的,但无论如何它很有用。 可以使用 \qecho 打印到 SQL 输出。

示例:

\qecho '\nDrop Trigger Functions:'
drop function if exists trade_tx_before();
drop function if exists trade_tx_after();
© www.soinside.com 2019 - 2024. All rights reserved.