Postgresql

PostgreSQL 中的觸發器過程可以學習自己的名稱嗎?

  • January 19, 2018

PostgreSQL 中的觸發器過程可以從特殊變數中獲知觸發它的觸發器的名稱TG_NAME。但它也能學會自己的名字嗎?

我想在新表中保留適用於每個觸發器過程的附加配置資訊,並且需要觸發器過程的名稱(最好不要手動重新輸入)才能從該表中選擇值。

您可以查詢pg_trigger目錄表並收集此資訊:

SELECT
   tg.tgfoid::regproc::text
INTO
   v_function_name
FROM
   pg_trigger tg
WHERE
   tg.tgrelid = TG_RELID
   AND tg.tgname = TG_NAME;

v_function_name是您必須在之前聲明的變數(作為文本或 varchar)。

如果不簡單(就像),強制轉換到regproc然後 to將使它的名稱雙引號,如果你想避免它,你可以簡單的 join和 get (在這種情況下可以是 type ):text``quote_ident``pg_proc``proname``v_function_name``name

SELECT
   pr.proname
INTO
   v_function_name
FROM
   pg_trigger tg
   INNER JOIN pg_proc pr ON pr.oid = tg.tgfoid
WHERE
   tg.tgrelid = TG_RELID
   AND tg.tgname = TG_NAME;

引用自:https://dba.stackexchange.com/questions/148117