Sql 数据库中主要同步的两个或多个表
我使用的是PostgreSQL,我需要有两个或多个表,这些表在我的数据库中大部分是同步的,这样子表中的一行的Sql 数据库中主要同步的两个或多个表,sql,database,postgresql,database-replication,Sql,Database,Postgresql,Database Replication,我使用的是PostgreSQL,我需要有两个或多个表,这些表在我的数据库中大部分是同步的,这样子表中的一行的添加/删除/更新就会被添加到主表中 我不确定在这种情况下是否可以使用触发器,因为在我的情况下,子表可能会被截断并加载新的数据集 你知道如何实现吗 例如: Employee_Sub1: id name version +------+-------+--------+ 101 John 1 102 David 1 105 Azi
添加/删除/更新就会被添加到主表中
我不确定在这种情况下是否可以使用触发器,因为在我的情况下,子表可能会被截断并加载新的数据集
你知道如何实现吗
例如:
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
我想你在寻找;有关如何在PL/PgSQL中实现它们的信息,请参见。在插入、更新或删除触发器后,使用在Employee_Sub1
、Employee_Sub2
和Employee_Sub3
将其更改传播到Employee_Final
对这个问题也有一点感觉,但我不确定继承是否合适
通常,当您更改ID时,您会在更新级联上使用
外键引用,但这在这里不起作用,因为您需要反转它,当您更改FK时,PK会得到更新。这是另一个触发工作;您必须比较新的
和旧的
记录ID,并在ID发生更改时更新主表。通常在源表上创建一个触发器,它会确定是否更新或插入目标表。您可以使用表继承。首先,创建没有数据的主表,然后使用继承选项从主表创建子表。当您从主表中选择时,resultset包含子表的数据集。Visit一种可能是将主表创建为视图,并将实际数据仅包含在子表中。但是,这意味着每次访问数据时都会运行用于创建视图的查询,因此,如果查询是重连接并且持续运行,这可能是不可伸缩的。我不确定在这种情况下是否可以使用触发器,因为在我的情况下,子表可能会被截断并加载新的数据集。抱歉,没有在问题的前面突出显示。没有触发器有什么可能吗?@Azi您可以使用TRUCATE上的触发器来应对这种情况。否则,按照@Edu的建议,将主表设置为视图。感谢您的回复。顺便说一句,表继承看起来像并集,id字段即使设置为主键也会重复。表继承中删除行是如何处理的?没有继承PK。数据修改发生在子表中,因此当您从主表中选择时,它仅从所有子表中选择数据。如果您希望在所有子表中处理ID,则可以使用单个序列,以便每个子表共享ID列的序列。就像。。。。创建表选项卡\u名称(列\u名称varchar(1)默认nextval('sequence\u name'))
Employee_Final:
id name version
+------+-------+--------+
101 John 1
102 DavidX 2
105 Azi 1
107 Marry 1
110 devil 1