首页 > 解决方案 > 在分区表与物化视图中包含 tsquery 结果

问题描述

我正在尝试构建一个为快速查询全文搜索而优化的表。

我已遵循本指南Postgres Full Text Search Is Good Enough并创建了一个物化视图,其中包含以下结果的列:

(setweight(to_tsvector(v.text_content), 'A'::"char") || setweight(to_tsvector(v.category_name), 'C'::"char") AS document

我遇到的问题是搜索结果需要在任何修改后立即更新。这意味着物化视图将需要频繁更新(可能每分钟多次),以用于最终将具有数以亿计到数十亿行的表。

这似乎是一个糟糕的设计,所以我想知道,使用 tsvector 结果作为常规列创建分区表会更好吗?这样,对单个记录的任何修改都不需要刷新物化视图。

这是一个更好的选择吗?

表定义:

CREATE TABLE public.text_records
(
id integer NOT NULL DEFAULT nextval('id_seq'::regclass),
user_id integer NOT NULL,
date timestamp with time zone NOT NULL DEFAULT now(),
text_content jsonb,
category_id integer NOT NULL
)

标签: postgresql

解决方案


使用触发器或 GENERATED 列或功能索引即时计算 tsvector。


推荐阅读