0

我有PostgreSQL的全文搜索查詢,看起來像這樣:pg_search和多列索引(軌道4)

to_tsvector('english', coalesce("products"."name"::text, '')) || to_tsvector('english', coalesce("products"."uid"::text, '')) || to_tsvector('english', coalesce("products"."serial"::text, '')); 

但是,創造這樣的遷移出於某種原因不能正常工作:

create_trigger(compatibility: 1).on(:products).before(:insert, :update) do 
    "new.tsv_body := to_tsvector('english', coalesce("products"."name"::text, '')) || to_tsvector('english', coalesce("products"."uid"::text, '')) || to_tsvector('english', coalesce("products"."serial"::text, ''));" 
end 

有什麼建議?

+0

每當你寫「不工作」,這就是你需要刪除的那些話,並取代他們的標誌一個爲什麼它不起作用的實際描述。它做什麼/不做?你期望什麼效果?究竟發生了什麼?有沒有錯誤消息或日誌消息? –

+0

採取了點。這是一個非常棘手的問題。下面的答案工作,當我註釋遷移運行的雙引號。然後我嘗試在控制檯中運行: Product.find_each(&:touch) 並且出現此錯誤: PG :: UndefinedTable:錯誤:缺少表「產品」的FROM-clause條目 –

+0

聽起來像「新問題」材料對我來說。細節! –

回答

1

的提示是在堆棧溢出是如何語法高亮顯示您的程序文本:各地表和列名

"new.tsv_body := to_tsvector('english', coalesce("products"."name"::text, '')) ....) 
                ^^^^^^^^^^ ^^^^^^ 

你已經包括雙引號。整個字符串用雙引號括起來。所以這些插入雙引號的結束字符串

你需要逃避他們,或忽略它們。我不這樣做的Ruby/Rails,但如果它像大多數語言什麼,反斜槓是適當的:

"new.tsv_body := to_tsvector('english', coalesce(\"products\".\"name\"::text, '')) ....)