使用自身更新文本数组以在PostgreSQL中运行“触发器”功能

时间:2018-04-24 00:51:41

标签: postgresql full-text-search psql

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')

0 个答案:

没有答案