我对 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
这里处理。
我希望ids
ie 主键在每个表上都相同。所以,我的想法是拥有FullText(id, content) == collection_myblogs(id, title)
——如果这有意义的话。因此,id
应该content
从collection_myblogs
表中复制 和 。如何实现这一目标?
我的理解是,我可以在我的任何插入或更新之前使用触发器collection_myblogs
并somehow
维护FullText(id, content) == collection_myblogs(id, title)
我将不胜感激这方面的任何指导。