2012-11-24 49 views
4

我有以下的tsvector更新觸發器在桌子上,讓我進行全文搜索一個tsvector字段「user_tsv」,更新的tsvector更新觸發

CREATE TRIGGER tsvector_user_update BEFORE INSERT OR UPDATE ON users 
FOR EACH ROW EXECUTE PROCEDURE 
tsvector_update_trigger(user_tsv, 'pg_catalog.english', firstname, surname, email); 
CREATE INDEX user_index_tsv ON users USING gin(user_tsv); 

因爲我已經加入另一列於表我想包含在這個觸發器中,有什麼方法可以更新觸發器(還有tsvector列),還是需要刪除列/觸發器並重新添加它們?

的PostgreSQL 9.0

在此先感謝

大衛

+0

您只能重命名或啓用/禁用觸發器。 –

回答

4

你並不需要刪除列或索引,只是刪除並重新創建觸發器和更新任何更改的字段。

使用常規的DROP TRIGGER聲明刪除觸發器,然後使用tsvector_update_trigger(全部在同一事務中)使用新列重新創建它。如果您已添加列,現在UPDATE tablename SET user_tsv = ... WHERE new_column IS NOT NULL即可更新列。檢查tsvector更新觸發器的來源以找出要在賦值中使用的適當表達式。

+0

由於克雷格,這工作了一種享受,雖然沒有需要手動更新tsv列,虛擬更新語句自動爲我做 – DaveB