使用自身更新文本数组以运行“;“触发”;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但获取错误错误:列

PostgreSQL中的全文搜索对我来说是新的。所以请容忍我。我正在处理一个现有的PostgreSQL表,该表有一个类型为
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仍然隐藏在触发器函数中。