Mysql 黑洞的等价物是什么?

Mysql 黑洞的等价物是什么?,mysql,postgresql,stored-procedures,triggers,Mysql,Postgresql,Stored Procedures,Triggers,在使用MySQL 5.5一段时间后,我将在postgreSQL lastest中启动一个新项目 在过去,我大量使用黑洞表来简化我的应用程序代码。 它允许我在应用程序代码中进行一次插入: INSERT INTO blackhole1 (val1, val2, val3, val4 ... CREATE TRIGGER ai_blackhole1_each AFTER INSERT .... BEGIN INSERT INTO table1 (.... INSERT INTO table2

在使用MySQL 5.5一段时间后,我将在postgreSQL lastest中启动一个新项目

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

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的原始版本。

使用PostgreSQL 9.1时,您可以使用MySQL的相同方法。请注意,在9.1之前的版本中,不可能在视图上创建触发器

您是在MySQL中使用存储引擎黑洞作为黑洞表,还是只是一个名称?PostgreSQL中没有可插拔的存储引擎,但您可以在PostgreSQL中的视图上使用INSTEAD OF触发器获得与MySQL中的存储引擎黑洞相同的行为。我不太明白你关于数据感知控件的观点:好吧,你在存储引擎的黑洞表中没有任何数据感知,但另一方面,你当然可以,例如,将hibernate实体映射到数据库视图


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

PostgreSQL和您当然可以很容易地复制这种功能。举第二个例子来说。然而,这个黑洞有一种严重的代码气味。@Jordan,代码气味在哪里?为什么有一个视图可以像显示单表选择一样显示多表选择,但在实际执行多表插入时使用黑洞显示单表插入是不可以的?你能想象另一个开发人员加入你的项目并试图弄清楚这个黑洞表是什么吗,或者插入值的正确顺序?更不用说你只是在第四个插件后面隐藏了三个插件。由于您提到了视图,MySQL和PostgreSQL都允许使用INSTEAD规则将视图插入到后者中。为什么不这样做呢?对另一个开发者或你来说,这将更容易理解。@Jordan,谢谢你的取而代之的规则,我看到了黑洞被滥用的可能性,但是如果你正确地编写和记录它,这并不是一个大问题。插入到视图中不起作用。如果视图远远超出select*fromAccepted,则取而代之的规则将符合要求。就陷阱达成一致。