2011-03-30 66 views
2

我使用Heroku上开发的应用程序,但他们没有加载的Postgres的PLPGSQL语言,这是造成试图运行时,以下问题:我该如何重写标准sql中的这个pgplsql函数?

CREATE FUNCTION profiles_search_trigger() RETURNS trigger AS $$ 
    begin 
    new.search_vector := 
     setweight(to_tsvector('pg_catalog.english', coalesce(new.display_name,'')), 'A') || 
     setweight(to_tsvector('pg_catalog.english', coalesce(new.about,'')), 'B') || 
     setweight(to_tsvector('pg_catalog.english', coalesce(new.music_education,'')), 'D') || 
     setweight(to_tsvector('pg_catalog.english', coalesce(new.other_experience,'')), 'D') || 
     setweight(to_tsvector('pg_catalog.english', coalesce(new.favourite_artists,'')), 'D'); 
    return new; 
    end 
    $$ LANGUAGE plpgsql; 

我怎么能改写这个使用标准的SQL,而比plpgsql?

回答

4

docs

这是目前不可能写在普通的SQL函数语言中的触发功能。

+0

啊,我错过了。谢谢。我没有看到任何文档中提到的触发器没有使用触发器函数,所以我猜我必须诉诸同等对待所有列 – 2011-03-30 13:16:35

+0

@Kevin:你可以创建一个表达式的索引而不会实现它,但是,你将不得不在查询中重新输入表达式:'CREATE INDEX ix_profiles_search ON配置文件USING GIST((setweight(...)|| ... || setweight(...)))'' – Quassnoi 2011-03-30 13:17:55