PostgreSQL 9.5 合并

PostgreSQL 9.5 Coalesce

我有一个 table "recipes",其中的列名为 "name"、"description"、"preparation"。 为了启用全文搜索,我做了:

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(unknown, character varying, unknown

谁能告诉我我做错了什么?

问候德克

看来你把括号放在了错误的地方。

to_tsvector 最多接受 2 个参数,但是您现在使用它的方式需要三个。

这应该可以解决问题:

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 将 return null 如果它的所有参数都是 null。如果需要,您可以提供一个默认值:coalesce(name, 'Nothing') 如果 namenull

,它将 return 'Nothing'