0

假設如何識別功能是否被執行或沒有在PostgreSQL中

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?

回答

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); 
+0

真棒。謝謝,丹尼斯。這完全解決了這個問題。 – Gopal