Postgresql

更新觸發器中的“函式不重音(文本)不存在”

  • May 22, 2022

我為表創建了一個觸發器,以使用表達式x1更新列。這個觸發函式拋出:y``to_tsvector(unaccent(x1.col1 || ' ' || x2.col1))

function unaccent(text) does not exist

為什麼呼叫觸發器時該函式不存在,而手動執行時存在?我正在使用 Supabase 來管理這個數據庫。

該功能unaccent()通常是由附加模組安裝的功能unaccent。看:

其他模組可以安裝到任何模式。(我喜歡使用專用模式。)請參閱:

如果是這樣,則必須將模式添加到 中,search_path以允許沒有模式限定的函式呼叫,就像您展示的那樣。

對您的觀察的明顯解釋是,您在一個會話中使用適當的 呼叫該函式search_path,並在另一個會話中使用不同的search_path.

要進行診斷,請在臨時呼叫命令之前將此行添加到您的 PL/pgSQL 觸發器函式中unaccent()(並確保將通知記錄或報告給客戶端,具體取決於您查看的位置):

RAISE NOTICE 'Current search_path: %', current_setting('search_path');

簡單且安全的解決方法是對函式名稱進行模式限定。像:

my_extension_schema.unaccent(text)

但是請調查是否search_path在您的數據庫集群中正確處理了模式和 ……

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