如何在postgresql中识别函数是不是正在执行
Posted
技术标签:
【中文标题】如何在postgresql中识别函数是不是正在执行【英文标题】: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 中是否有更好的方法来实现这一点?
【问题讨论】:
【参考方案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);
【讨论】:
以上是关于如何在postgresql中识别函数是不是正在执行的主要内容,如果未能解决你的问题,请参考以下文章
如何确定给定时区中的给定时间是不是在postgresql中是DST?
查明用户是不是有权在 PostgreSQL 中选择/更新/...一个表/函数/...