我正在使用PostgreSQL,我需要有两个或更多的表,这些表大部分在我的数据库中同步,这样子表中的一行Add/Delete/Update
就会生成到主表中。
我不确定在这种情况下是否可以使用触发器,因为在我的情况下,子表可能会被截断并加载新的数据集
知道如何实现吗?
示例:
Employee_Sub1:
id name version
+------+-------+--------+
101 John 1
102 David 1
105 Azi 1
Employee_Sub2:
id name version
+------+-------+--------+
101 John 1
102 DavidX 2 <- Sub2 having updated value for id 102
105 Azi 1
107 Marry 1
Employee_Sub3:
id name version
+------+-------+--------+
101 John 1
105 Azi 1
110 devil 1 <- Sub3 having new row of data
Employee_Final表应如下所示:
Employee_Final:
id name version
+------+-------+--------+
101 John 1
102 DavidX 2
105 Azi 1
107 Marry 1
110 devil 1
答案 0 :(得分:2)
我认为你正在寻找triggers;请参阅PL/PgSQL trigger procedures了解如何在PL / PgSQL中实现它们。在AFTER INSERT OR UPDATE OR DELETE
,Employee_Sub1
和Employee_Sub2
的每一个上使用Employee_Sub3
触发器将其更改传播到Employee_Final
。
对这个问题也有一点table inheritance的感觉,但我不确定继承是否合适。
通常当您更改ID时,使用ON UPDATE CASCADE
外键引用,但这在此处不起作用,因为您需要将其反转,在更改FK时PK会更新。这是触发器的另一项工作;您必须比较NEW
和OLD
记录ID,并在ID已更改时更新主表。
答案 1 :(得分:1)
您可以使用表继承。首先,创建没有数据的主表,并使用继承选项从主表创建子表。从主表中选择时,结果集包括子表的数据集。访问http://www.postgresql.org/docs/9.2/static/ddl-inherit.html
答案 2 :(得分:0)
通常,您在源表上创建一个触发器,然后确定是否更新或插入目标表。