我正在使用表继承将表拆分为较小的表。我正在使用BEFORE INSERT
触发器将新数据路由到正确的继承表中。此触发器返回NULL
,因此实际INSERT
将无法在父表上运行。
这样做的副作用是缺少实际INSERT
:
INSERT INTO TABLE a VALUES (...) RETURNING a_id
触发BEFORE INSERT
,它将新数据定向到另一个表a_CURRENT_DATE
- 必要时由触发器函数动态创建。触发器返回NULL
,因此表INSERT
中的实际a
被抑制。
原始查询没有结果,因此没有a_id
(a_id
是SERIAL
列)可用。
获得a_id
值的最优雅方式是什么?
答案 0 :(得分:3)
好问题。这是分区的典型问题。我担心没有好的或优雅的解决方案,你所能做的只是介绍一些解决方法:
id
类型生成的serial
,则可以使用currval()
...这将意味着另一个查询。 Here还有另一种方法 - 您可以创建视图,并为该视图使用instead of
触发器。很难说这是否优雅,但对我而言,这是非常接近的。