有沒有辦法從plpgsql函數中獲得函數的名稱?甚至是函數的OID?使用plpgsql獲取函數內的當前函數的名稱
我知道在plpgsql中有一些「特殊的」變量(如FOUND),但似乎沒有任何方法可以獲取此變量。 (儘管如此,如果你的函數是用C語言編寫的,我已經閱讀過它的地方。這並不重要,但它會讓我做的更好,更脆弱。
我使用PostgreSQL訴9.1.5
有沒有辦法從plpgsql函數中獲得函數的名稱?甚至是函數的OID?使用plpgsql獲取函數內的當前函數的名稱
我知道在plpgsql中有一些「特殊的」變量(如FOUND),但似乎沒有任何方法可以獲取此變量。 (儘管如此,如果你的函數是用C語言編寫的,我已經閱讀過它的地方。這並不重要,但它會讓我做的更好,更脆弱。
我使用PostgreSQL訴9.1.5
對於觸發器使用TG_NAME得到激發觸發器(未觸發功能)的名稱。
您還有current_query()
以獲取頂級查詢由應用程序執行,這是您的函數執行的根本原因。它不會顯示任何中間功能。
否則,不是真的AFAIK,我前一陣子想去打印一個「當前函數堆棧」進行調試。其他人可能知道更多。
UPDATE:在Pg 9.4及以上版本中,您還可以使用PG_CONTEXT
來調用堆棧,但不僅僅是當前的函數名稱。
更新:可能採取調用堆棧可以在PostgreSQL的9.4
沒有,有沒有辦法如何讓PLPGSQL功能當前執行的函數的名稱。
一年前我寫了訪問調用堆棧的函數 - 它是orafce的一部分。您可以從堆棧
更新:在PostgreSQL 9.4中可以調用堆棧 –
獲得最後一個函數在Postgres 9.4的,下面的函數將返回自己的名字:
CREATE OR REPLACE FUNCTION your_schema.get_curr_fx_name()
RETURNS text AS $$
DECLARE
stack text; fcesig text;
BEGIN
GET DIAGNOSTICS stack = PG_CONTEXT;
fcesig := substring(stack from 'function (.*?) line');
RETURN fcesig::regprocedure::text;
END;
$$ LANGUAGE plpgsql;
這感覺像這些問題之一,你已經決定在解決實際問題並且您正在尋求該解決方案的幫助。背景是什麼?你爲什麼需要這些信息?你想用它解決什麼問題? –
@CraigRinger。你是對的。我真的不想寫一篇500字的論文,寫一個問題,說明我正在做什麼,以及我已經解決的所有解決方案/設計中的所有要求,時間表,設計經驗等等。我只是試圖回答關於它的一小部分的問題。 –
@DavidS有道理。 '運氣。 –