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')
如果 name
是 null
,它将 return 'Nothing'
我有一个 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')
如果 name
是 null
'Nothing'