什么相当于黑洞?

时间:2011-10-13 08:31:58

标签: mysql postgresql stored-procedures triggers

我正在postgreSQL (最新)开始一个新项目,已经使用MySQL 5.5了一段时间。

过去我大量使用blackhole表来简化我的应用程序代码 它允许我在应用程序代码中执行一次插入:

INSERT INTO blackhole1 (val1, val2, val3, val4 ...

CREATE TRIGGER ai_blackhole1_each AFTER INSERT ....
BEGIN
  INSERT INTO table1 (....
  INSERT INTO table2 (....
  INSERT INTO log (.....

在黑洞表中有一个触发器将值插入到不同的表中。

我在postgreSQL中使用什么来替换此功能?

我知道我可以使用存储过程,但这意味着我无法将数据感知控件连接到黑洞表。所以我希望棒子尽可能接近MySQL原版。

1 个答案:

答案 0 :(得分:3)

使用PostgreSQL 9.1,您可以create triggers以与MySQL相同的方式进行操作。请注意,在9.1之前的版本中无法在视图上创建触发器。

您是否将存储引擎BLACKHOLE用于MySQL中的 blackhole 表,还是仅仅是一个名称? PostgreSQL中没有可插拔的存储引擎,但是你可以获得与MySQL中的存储引擎BLACKHOLE相同的行为,并在PostgreSQL中的视图上使用INSTEAD OF触发器。我对数据感知控件没有明确的看法:afaik在BLACKHOLE表(存储引擎)中没有任何数据感知,但是在另一方面,你当然可以,例如将hibernate实体映射到数据库视图。

使用触发器简化应用程序代码是一个好主意还是坏主意取决于实际用例。例如,我更喜欢触发器而非应用程序逻辑用于日志记录和审计,因为这种方法为连接到数据库的不同应用程序以及管理员的即席查询/语句提供单一解决方案。但根据我的经验,触发器不会消除复杂性,只是将其转移到数据库层。这通常使得多层应用程序更难以扩展和维护。