我们在PostgreSQL 9.4中有两个表A和B.我们希望确保A的列始终是B列的子集(即,防止A上的ALTER
添加/删除/修改将使其与B不同的列。怎么能实现这一目标?
我的猜测是在ALTER上使用一种触发器(虽然触发器仅在CRUD上发生)或在A上的特殊约束? (虽然每列上的外键看起来都有点矫枉过正)。
(用例:B就像是A的影子,它会定期收到A的记录转储,所以我们要确保如果A的结构发生变化,我们不会忘记相应地更改B) / p>
答案 0 :(得分:0)
正如您所知,触发器在CRUD中。我想也许你可以创建一个触发器来比较每个CRUD上的两个表并发出警报。但是只有在做出改变并且有人玩桌子后才会发出警报。
您可以为tableA列的每个tableB列创建多个FK,但只有在尝试删除或重命名列时才会通知,如果更改字段类型或添加新列,则不会收到警报。
答案 1 :(得分:0)
@Abelisto在他的评论中是正确的,在PostgreSQL中实现这一点的好方法是使用Inheritance。
另一种方法是让主人有一张桌子和"updatable VIEW"(或RULEs的视图......)