Postgresql
更新觸發器中的“函式不重音(文本)不存在”
我為表創建了一個觸發器,以使用表達式
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
在您的數據庫集群中正確處理了模式和 ……