两个或多个表主要在数据库中同步

时间:2012-11-09 07:43:15

标签: sql database postgresql database-replication

我正在使用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

3 个答案:

答案 0 :(得分:2)

我认为你正在寻找triggers;请参阅PL/PgSQL trigger procedures了解如何在PL / PgSQL中实现它们。在AFTER INSERT OR UPDATE OR DELETEEmployee_Sub1Employee_Sub2的每一个上使用Employee_Sub3触发器将其更改传播到Employee_Final

对这个问题也有一点table inheritance的感觉,但我不确定继承是否合适。

通常当您更改ID时,使用ON UPDATE CASCADE外键引用,但这在此处不起作用,因为您需要将其反转,在更改FK时PK会更新。这是触发器的另一项工作;您必须比较NEWOLD记录ID,并在ID已更改时更新主表。

答案 1 :(得分:1)

您可以使用表继承。首先,创建没有数据的主表,并使用继承选项从主表创建子表。从主表中选择时,结果集包括子表的数据集。访问http://www.postgresql.org/docs/9.2/static/ddl-inherit.html

答案 2 :(得分:0)

通常,您在源表上创建一个触发器,然后确定是否更新或插入目标表。