假设我有以下伪模式,其中1-many
关系是使用 Postgres 数组建模的:
CREATE TYPE quotes AS
(
text CHARACTER VARYING,
is_direct CHARACTER VARYING
);
CREATE TABLE posts
(
body CHARACTER VARYING,
q quotes[]
);
insert into posts(body,q) VALUES('ninjas rock',ARRAY[ ROW('I AGREE',True)::quotes, ROW('I DISAGREE',FALSE)::quotes ]);
我的第一个问题是:如何执行选择以quote->text
从整个数组中过滤掉。
这有效:
test=# select body, q[1].text from posts;
body | text
--------------+---------
hassan rocks | I AGREE
(1 row)
但这不是(请注意,正在检索整个复合类型):
test=# select body, (q).text from posts;
body | text
--------------+-------------------------------------------------
hassan rocks | {"(\"I AGREE\",true)","(\"I DISAGREE\",false)"}
(1 row)
为了解决我真正的问题,我将如何创建一个to_tsvector
包含帖子正文和所有引用文本的 gin 或 gist(有或没有)索引?我不喜欢使用额外的列索引方法,因为触发器让我很伤心。
目前,我的模式将帖子和引用表示为一种1-many
关系,但是我认为如果 postgres 支持我正在尝试做的事情,它将大大简化事情。