【问题标题】:How to create tsvector_update_trigger on Non-character type data如何在非字符类型数据上创建 tsvector_update_trigger
【发布时间】:2021-12-18 19:22:44
【问题描述】:

我们如何在非字符数据类型上创建 tsvector 更新触发器。 例如,我创建了一个类似这样的 ts 矢量触发器。

创建触发器 tr_doc_id_col 插入或更新之前 开文件 每一行 执行过程 tsvector_update_trigger('tsv_doc_id', 'pg_catalog.english', doc_id');

这里,

tr_doc_id_col -- 触发器的名称

document -- 表名

tsv_doc_id -- doc_id 的 tsvector 形式

doc_id -- 列的名称。它的数据类型是整数

当 doc_id 列发生插入、删除或更新时,此触发器应更新 tsv_doc_id。

但是,触发器抛出一个错误,指出 doc_id 不是字符类型(即它无法根据非字符类型列进行更新)。 我尝试在标题、正文等文本数据类型的列上创建相同类型的触发器。在这种情况下,它工作得很好,但在较早的情况下。 谁能告诉我在像 doc_id 这样的非字符数据类型的情况下该怎么做?

【问题讨论】:

    标签: postgresql triggers sequelize.js


    【解决方案1】:

    tsvector_update_trigger 只是一个方便的函数,它会做它该做的事情。你总是可以用你想要的任何装饰来编写你自己的实现(在这种情况下,转换为文本),但你不能改变现有的行为。但它也相当过时。现代的方法是使用 GENERATED 列。

    create table document (
       doc_id int,
       tsv_doc_id tsvector generated always as (to_tsvector('english',doc_id::text)) stored
    );
    

    虽然我会质疑总是只包含一个整数的 tsvector 的实用性。

    【讨论】:

      猜你喜欢
      • 2018-08-19
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 2019-01-09
      • 2013-03-05
      相关资源
      最近更新 更多