使用自身更新文本数组以运行“;“触发”;PostgreSQL中的函数
PostgreSQL中的全文搜索对我来说是新的。所以请容忍我。我正在处理一个现有的PostgreSQL表,该表有一个类型为使用自身更新文本数组以运行“;“触发”;PostgreSQL中的函数,postgresql,full-text-search,psql,Postgresql,Full Text Search,Psql,PostgreSQL中的全文搜索对我来说是新的。所以请容忍我。我正在处理一个现有的PostgreSQL表,该表有一个类型为text[](名为tags)的列,我想在该列上实现全文搜索。我添加了另一列ts\u vector(名为tags\u tsv)类型,其中包含tags列中的可索引词素。我还有一个标签的索引和一个触发器,可以在标签应用更新或插入时随时更新标签 为了更新此表中的现有行,我需要通过更新标记列本身来运行此触发器。我运行了更新tableName set tags=tags但获取错误错误:列
text[]
(名为tags
)的列,我想在该列上实现全文搜索。我添加了另一列ts\u vector
(名为tags\u tsv
)类型,其中包含tags
列中的可索引词素。我还有一个标签的索引
和一个触发器,可以在标签
应用更新或插入时随时更新标签
为了更新此表中的现有行,我需要通过更新标记
列本身来运行此触发器。我运行了更新tableName set tags=tags
但获取错误错误:列“tags”不是字符类型
好的。要将标记
数组转换成文本,我想我需要使用数组到字符串
像这样更新tableName set tags=array\u到字符串(标记,,)
但是我得到您需要重写或强制转换表达式。
我迷路了。我错过了什么
我在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')
向上投票选择“与我赤裸”。您应该显示您的表定义和触发器。那里可能有一只虫子。原则上,你的技术是可行的,但事后用真空吸尘器(完全)可能是个好主意。@LaurenzAlbe我已经更新了它。哦,把“裸体”改为“熊”哈哈。你已经提供了几乎完整的信息。几乎是有区别的,因为一个bug仍然隐藏在触发器函数中。