我们可以在 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;
$$;
如果这段代码太糟糕而无法评论,我深表歉意,请建议更好的方法,谢谢
是的,您可以像下面一样使用
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;
您可以在函数中的任何地方使用非常简单的语句。
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”;
您也可以在没有
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)
RAISE NOTICE 是 PL/pgSQL 的一部分,因此它仅在函数或匿名 DO 块中合法。我想你可以创建一个发出通知的函数并调用它。
不确定这是否是您正在寻找的,但无论如何它很有用。 可以使用 \qecho 打印到 SQL 输出。
示例:
\qecho '\nDrop Trigger Functions:'
drop function if exists trade_tx_before();
drop function if exists trade_tx_after();