PostgreSQL 9.5 Coalesce

时间:2016-08-22 12:50:16

标签: postgresql coalesce postgresql-9.5

我有一张桌子"食谱"列名为" name"," description","准备"。 为了启用全文搜索,我做了:

ALTER TABLE recipes ADD COLUMN recipes_searchtext TSVECTOR;

CREATE INDEX idx_recipes_searchtext_gin ON recipes USING GIN(recipes_searchtext);
UPDATE recipes SET recipes_searchtext = 
setweight(to_tsvector('german',name), 'A') ||
setweight(to_tsvector('german',description), 'B') ||
setweight(to_tsvector('german',preparation), 'C');

我是PostgreSQL的新手,但据我所知,经过一些测试,这对我来说很好。

但后来我读到了" COALESCE"处理NULL值。 所以我试过了:

UPDATE recipes SET recipes_searchtext = 
setweight(to_tsvector('german',COALESCE(name), 'A')) ||
setweight(to_tsvector('german',COALESCE(description), 'B')) ||
setweight(to_tsvector('german',COALESCE(preparation), 'C'));

导致错误消息的原因

  

Funktion to_tsvector(未知,字符变化,未知

有人可以给我一个提示我做错了吗?

尊重德克

1 个答案:

答案 0 :(得分:1)

看起来你的括号在错误的地方。

to_tsvector最多需要2个参数,但是你现在拥有它的方式是3个。

这应该解决它:

UPDATE recipes SET recipes_searchtext = 
setweight(to_tsvector('german',COALESCE(name)), 'A') ||
setweight(to_tsvector('german',COALESCE(description)), 'B') ||
setweight(to_tsvector('german',COALESCE(preparation)), 'C');

但是,我发现您的查询之间没有区别。 coalesce如果其所有参数均为null,则会返回null。如果您愿意,可以提供默认值:coalesce(name, 'Nothing')如果'Nothing'name

,将返回null