PostgreSQL中的全文搜索对我来说是新的。所以忍受我。我正在开发一个现有的 PostgreSQL表,其中包含text[]
(名为tags
)的列,我希望对其进行全文搜索。我添加了另一个类型为ts_vector
的列(名为tags_tsv
),该列将包含tags
列中的可索引词汇。我还有tags
的索引以及在tags_tsv
应用更新或插入内容时更新tags
的触发器。
为了更新此表中的现有行,我需要通过自己更新tags
列来运行此触发器。我运行update tableName set tags = tags;
但收到错误ERROR: column "tags" is not of a character type
。
好。要将tags
数组放入文本中,我认为我需要像array_to_string
一样使用update tableName set tags = array_to_string(tags, ',');
,但我得You will need to rewrite or cast the expression.
。
我迷路了。我错过了什么?
我正在psql
中完成所有这些工作,下面是表格定义:
Column | Type |
----------+----------|
id | integer |
title | text |
tags | text[] |
title_tsv | tsvector |
tags_tsv | tsvector |
Indexes:
"test_pkey" PRIMARY KEY, btree (id)
"title_idx" gin (title_tsv)
"tags_idx" gin (tags_tsv)
Triggers:
tsvectorupdate BEFORE INSERT OR UPDATE ON test FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger('title_tsv', 'pg_catalog.english', 'title')
tsvectorupdate2 BEFORE INSERT OR UPDATE ON test FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger('tags_tsv', 'pg_catalog.english', 'tags')