Postgresql

帶有 tsvector_update_trigger 的 postgresql 自定義文本搜尋配置

  • February 25, 2016

我想使用自定義文本搜尋配置,tsvector_update_trigger以便能夠使用法語詞典和unaccent.

所以我這樣做了:

CREATE TEXT SEARCH CONFIGURATION fr ( COPY = french );
ALTER TEXT SEARCH CONFIGURATION fr ALTER MAPPING FOR hword, hword_part, word WITH unaccent, french_stem;

然後創建觸發器:

CREATE TRIGGER TS_tsv BEFORE INSERT OR UPDATE ON books FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger(tsv, 'pg_catalog.fr', title, authors, descriptionText);

但不幸的是,當我想創建或更新一行時,我收到一條錯誤消息,告訴我 fr 不存在。

如何將此配置與觸發器一起使用?

創建新配置時

CREATE TEXT SEARCH CONFIGURATION fr ( COPY = french );

它不會出現在 中pg_catalog,而是出現在目前架構中(public預設情況下)。

\dFpsql中的命令可以看出這一點:

測試=# \dF
文本搜尋配置列表
架構 | 姓名 | 描述 
------------+------------+---------------------------------------
pg_catalog | 丹麥語 | 丹麥語的配置
pg_catalog | 荷蘭語 | 荷蘭語配置
pg_catalog | 英語 | 英文配置
pg_catalog | 芬蘭語 | 芬蘭語配置
pg_catalog | 法語 | 法語配置
pg_catalog | 德語 | 德語配置
pg_catalog | 匈牙利語| 匈牙利語配置
pg_catalog | 意大利語 | 意大利語配置
pg_catalog | 挪威語| 挪威語配置
pg_catalog | 葡萄牙語 | 葡萄牙語的配置
pg_catalog | 羅馬尼亞語| 羅馬尼亞語配置
pg_catalog | 俄語 | 俄語配置
pg_catalog | 簡單 | 簡單的配置
pg_catalog | 西班牙語 | 西班牙語配置
pg_catalog | 瑞典語 | 瑞典語配置
pg_catalog | 土耳其語 | 土耳其語配置
公共 | 法語 |
(17 行)

在這種情況下,應使用以下命令創建觸發器:

CREATE TRIGGER TS_tsv BEFORE INSERT OR UPDATE ON books
 FOR EACH ROW EXECUTE PROCEDURE
 tsvector_update_trigger(tsv, 'public.fr', title, authors, descriptionText);

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