【发布时间】:2012-08-09 18:52:30
【问题描述】:
假设我有以下伪模式,其中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)
为了解决我真正的问题,我将如何创建一个包含帖子正文和所有引用的文本的 gin 或 gist(有或没有 to_tsvector)索引文本 ?我不喜欢将索引的额外列方法用作触发器make me sad。
目前我的架构将帖子和引用表示为1-many 关系,但是我认为如果 postgres 支持我正在尝试做的事情,它将大大简化事情。
【问题讨论】:
标签: database postgresql full-text-search relational-database data-modeling