带有BEFORE INSERT触发器的RETURNING子句

时间:2017-11-23 10:59:23

标签: postgresql

我正在使用表继承将表拆分为较小的表。我正在使用BEFORE INSERT触发器将新数据路由到正确的继承表中。此触发器返回NULL,因此实际INSERT将无法在父表上运行。

这样做的副作用是缺少实际INSERT

的任何结果

INSERT INTO TABLE a VALUES (...) RETURNING a_id

触发BEFORE INSERT,它将新数据定向到另一个表a_CURRENT_DATE - 必要时由触发器函数动态创建。触发器返回NULL,因此表INSERT中的实际a被抑制。

原始查询没有结果,因此没有a_ida_idSERIAL列)可用。

获得a_id值的最优雅方式是什么?

1 个答案:

答案 0 :(得分:3)

好问题。这是分区的典型问题。我担心没有好的或优雅的解决方案,你所能做的只是介绍一些解决方法:

  • 插入,然后删除 - 是的,远非完美,
  • 如果您需要id类型生成的serial,则可以使用currval() ...这将意味着另一个查询。

Here还有另一种方法 - 您可以创建视图,并为该视图使用instead of触发器。很难说这是否优雅,但对我而言,这是非常接近的。