Postgresql
如何將 tsvector_update_trigger 與 jsonb 列一起使用?
我需要從 jsonb 值創建記憶體的 ts_vector 列。我嘗試創建一個觸發器
CREATE TRIGGER tsvectorupdate BEFORE INSERT OR UPDATE ON tags FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger( tsv, 'pg_catalog.english', "translations#>>'{en,name}'" );
但結果我得到一個錯誤
ERROR: column "translations#>>'{en,name}'" does not exist
你沒有。您將需要編寫自己的觸發函式。內置的僅適用於文本列,不適用於 jsonb 列,也不適用於列上的函式。
在較新的版本上,另一種方法是使用生成的列。
create table tags ( translations jsonb, tsv tsvector generated always as (to_tsvector('pg_catalog.english',translations#>>'{en,name}')) stored );
雙引號是列的指標,但 postgres 通過加倍來轉義單引號
CREATE TRIGGER tsvectorupdate BEFORE INSERT OR UPDATE ON tags FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger( tsv, 'pg_catalog.english', 'translations#>>''{en,name}''' );