【问题标题】:How to identify whether a function is executing or not in postgresql如何在postgresql中识别函数是否正在执行
【发布时间】:2013-08-20 09:47:04
【问题描述】:

假设

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 中是否有更好的方法来实现这一点?

【问题讨论】:

    标签: sql database postgresql stored-procedures user-defined-functions


    【解决方案1】:

    我最初的要求是调用一个函数,前提是它尚未运行。在 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);
    

    【讨论】:

      猜你喜欢
      • 2015-09-29
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多