在postgres中打印运行时消息

时间:2014-03-19 14:09:37

标签: sql sql-server postgresql

我们可以在postgres中使用RAISE NOTICE作为等同于RAISERROR'消息来显示'在SQL Server中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;
$$;

如果这段代码太难评论我很抱歉,请提出更好的方法,谢谢

4 个答案:

答案 0 :(得分:15)

是的,您可以使用下面的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;

答案 1 :(得分:1)

您也可以在没有0块的情况下进行常规选择。

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;

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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;

LANGUAGE'plpgsql';