在postgresql

时间:2016-02-04 02:48:08

标签: postgresql postgresql-9.4

我们在PostgreSQL 9.4中有两个表A和B.我们希望确保A的列始终是B列的子集(即,防止A上的ALTER添加/删除/修改将使其与B不同的列。怎么能实现这一目标?

我的猜测是在ALTER上使用一种触发器(虽然触发器仅在CRUD上发生)或在A上的特殊约束? (虽然每列上的外键看起来都有点矫枉过正)。

(用例:B就像是A的影子,它会定期收到A的记录转储,所以我们要确保如果A的结构发生变化,我们不会忘记相应地更改B) / p>

2 个答案:

答案 0 :(得分:0)

正如您所知,触发器在CRUD中。我想也许你可以创建一个触发器来比较每个CRUD上的两个表并发出警报。但是只有在做出改变并且有人玩桌子后才会发出警报。

您可以为tableA列的每个tableB列创建多个FK,但只有在尝试删除或重命名列时才会通知,如果更改字段类型或添加新列,则不会收到警报。

答案 1 :(得分:0)

@Abelisto在他的评论中是正确的,在PostgreSQL中实现这一点的好方法是使用Inheritance

另一种方法是让主人有一张桌子和"updatable VIEW"(或RULEs的视图......)