我对PostgreSQL相当新(被django ORM宠坏了!),我想创建一个触发器,根据另一个表的条目更新表。
所以,我的架构上有以下表格:
collection_myblogs(id, col1,col2,title,col4,col5)
..其中字段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
。
我希望每个表上的ids
即主键是相同的。所以,我的想法是FullText(id, content) == collection_myblogs(id, title)
- 如果这是有道理的。因此,id
和content
应该从collection_myblogs
表中复制。如何实现这一目标?
我的理解是,我可以在collection_myblogs
和somehow
维护FullText(id, content) == collection_myblogs(id, title)
我将不胜感激任何指导。
答案 0 :(得分:0)
实际上有很多方法可以解决这个问题。一些例子:
使用表继承为数据创建“接口”(不需要触发器,抽象表最终像视图一样运行)。但这是一个复杂的领域。
像您一样使用触发器方法,然后单独处理UPDATE和DELETE。这里的一个重要问题是,如果您有两个相同的文本区域,则更新触发器需要能够将它们分开。
还有很多其他的,但那些应该让你开始。
答案 1 :(得分:-2)
实际上,结果很简单。只需按照this