如何在postgresql中识别函数是否正在执行

如何在postgresql中识别函数是否正在执行,sql,database,postgresql,stored-procedures,user-defined-functions,Sql,Database,Postgresql,Stored Procedures,User Defined Functions,假设 CREATE OR REPLACE FUNCTION report.dummy_func1() RETURNS integer AS $$ DECLARE BEGIN PERFORM pg_sleep(10); RETURN 1; END; $$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION report.dummy_func() RETURNS integer AS $$ DECLARE BEGIN PERFOR

假设

CREATE OR REPLACE FUNCTION report.dummy_func1() RETURNS integer AS $$
DECLARE
BEGIN
    PERFORM pg_sleep(10);
    RETURN 1;
END;
$$ LANGUAGE plpgsql;   

CREATE OR REPLACE FUNCTION report.dummy_func() RETURNS integer AS $$
DECLARE
BEGIN
    PERFORM pg_sleep(5);
    PERFORM report.dummy_func1();
    RETURN 1;
END;
$$ LANGUAGE plpgsql;   

Select report.dummy_func();
通过上述设置,是否有方法确定当前正在执行的功能

识别的一种方法是使用pg_stat_activity,但它不显示正在执行的函数

在postgresql中是否有可靠的方法来确定函数是否正在执行

我最初的要求是调用一个函数,但前提是它尚未运行。在postgresql中有更好的方法来实现这一点吗

我最初的要求是调用一个函数,但前提是它尚未运行。在postgresql中有更好的方法来实现这一点吗

听起来您应该使用建议锁:

基本上是这样的:

if not pg_try_advisory_lock(_key) then return -1; end if;
-- do stuff...
perform pg_advisory_unlock(_key);