0

我对 PostgreSQL 相当陌生(被 django ORM 宠坏了!),我想创建一个触发器,它根据另一个表的条目更新一个表。

所以,我的架构上有下表:

collection_myblogs(id, col1,col2,title,col4,col5)

..where 字段id是自动生成的。现在,我创建了一个新表,如下所示:

CREATE TABLE FullText(id SERIAL NOT NULL, content text NOT NULL);
ALTER TABLE ONLY FullText ADD CONSTRAINT fulltext_pkey PRIMARY KEY (id);

我从 collection_myblogs 中插入值,如下所示:

INSERT INTO FullText(content) SELECT title FROM collection_myblogs;

到目前为止一切都很好......我现在想要一个触发器,FullText这样FullText每次 collection_myblogs 有一个新条目时都会用新条目更新自己。所以,我尝试创建一个触发器,如下所示:

CREATE TRIGGER collection_ft_update BEFORE INSERT OR UPDATE ON collection_myblogs FOR EACH ROW EXECUTE PROCEDURE ft_update();

现在,我不完全确定应该执行什么ft_update()功能,目前,我有:

CREATE FUNCTION ft_update() RETURNS trigger AS '
BEGIN
INSERT INTO FullText(content) SELECT new.title;
return new;
END
' LANGUAGE plpgsql;

..这适用于INSERTS但不是UPDATES。即,如果我更新原始列的标题,collections_myblog(title)它会显示为一个新条目,FullText我不确定如何在ids这里处理。

我希望idsie 主键在每个表上都相同。所以,我的想法是拥有FullText(id, content) == collection_myblogs(id, title)——如果这有意义的话。因此,id应该contentcollection_myblogs表中复制 和 。如何实现这一目标?

我的理解是,我可以在我的任何插入或更新之前使用触发器collection_myblogssomehow维护FullText(id, content) == collection_myblogs(id, title)

我将不胜感激这方面的任何指导。

4

2 回答 2

0

实际上有很多方法可以处理这个问题。一些例子:

  1. 使用表继承为您的数据创建一个“接口”(不需要触发器,抽象表最终会像视图一样运行)。这是一个复杂的领域。

  2. 像您一样使用触发器方法,然后分别处理 UPDATE 和 DELETE。这里的大问题是,如果您有两个相同的文本区域,您的更新触发器需要能够将它们分开。

还有很多其他的,但那些应该让你开始。

于 2013-11-09T13:04:23.297 回答
-2

实际上,事实证明这很简单。只需要遵循这个

于 2013-08-13T12:50:00.367 回答