use*_*805 5 postgresql monitoring stored-procedures
我在 PostgreSQL 中有一个长期运行的 PL/pgSQL 存储过程。如何确定其中当前正在执行的语句?
一种粗略但有效的方法(在任何版本中都可用)是在 plpgsql 函数中发出通知:
CREATE OR REPLACE FUNCTION foo() RETURNS void AS
$func$
BEGIN
PERFORM ...
RAISE NOTICE 'step1';
INSERT ...
RAISE NOTICE 'step2';
DELETE ...
END
$func$ LANGUAGE plpgsql
Run Code Online (Sandbox Code Playgroud)
另一种可能性是使用自动解释
SET auto_explain.log_nested_statements = ON;
Run Code Online (Sandbox Code Playgroud)
第二种方法给你的比你要求的要多得多。两者都是拐杖和变通办法,或多或少具有侵入性。@Craig在评论中指出 Pavel 9.4
中即将推出的功能似乎是一个重大改进:
GET DIAGNOSTICS text_var = PG_CONTEXT;
Run Code Online (Sandbox Code Playgroud)
它已经记录在 /devel 手册中。