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

时间:2013-08-20 09:47:05

标签: 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
    PERFORM pg_sleep(5);
    PERFORM report.dummy_func1();
    RETURN 1;
END;
$$ LANGUAGE plpgsql;   

Select report.dummy_func();

通过上述设置,有没有办法确定当前正在执行哪个功能?

识别的一种方法是使用 pg_stat_activity ,但它不会显示正在执行的功能。

在postgresql中是否有可靠的方法来查找函数是否正在执行。

我原来的要求是调用一个函数,只有它还没有运行。有没有更好的方法在postgresql中实现这一点?

1 个答案:

答案 0 :(得分:2)

  

我原来的要求是调用一个函数,只有它还没有运行。有没有更好的方法在postgresql中实现这一点?

听起来你应该使用咨询锁:

http://www.postgresql.org/docs/current/static/explicit-locking.html

基本上是这样的:

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