2

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

3 回答 3

2

我认为您正在寻找触发器;有关如何在 PL/PgSQL 中实现它们,请参阅PL/PgSQL 触发器过程。在每个、和上使用AFTER INSERT OR UPDATE OR DELETE触发器,将它们的更改传播到。Employee_Sub1Employee_Sub2Employee_Sub3Employee_Final

关于这个问题还有一点表继承的感觉,但我不确定继承是否合适。

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

于 2012-11-09T07:49:10.077 回答
1

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

于 2012-11-09T08:47:20.267 回答
0

通常,您在源表上创建一个触发器,它会确定是更新还是插入到目标表中。

于 2012-11-09T08:00:38.560 回答