ActiveRecord、Postgres 和分区表

mik*_*key 0 postgresql activerecord partitioning ruby-on-rails rails-activerecord

我已经根据此处的pg 文档在我们的 pg 8.3 数据库之一上设置了基于触发器的分区方案: 。基本上,我有一个父表和几个子表。父表上的插入触发器会将父表上的任何插入重定向到适当的子表中——这效果很好。

然而,ActiveRecord pg 适配器似乎依赖于 postgres INSERT ... RETURNING "id" 扩展来获取初始插入后返回行的 id。但触发器似乎破坏了 RETURNING 子句——尽管行已正确创建,但没有返回 id。

虽然我认为这种行为是有道理的——毕竟,主表中没有插入任何内容,我确实需要找到某种解决方法,因为将插入其他需要刚刚插入的行 ID 的子记录排。

我想我可以在插入之前向行添加某种唯一的 id,然后在插入后使用此键重新读取它,但这看起来相当混乱。有人有更好的解决方法吗?

小智 5

从 Rails v.2.2.1 开始,您只需覆盖 PostgreSQLAdapter 中的 #supports_insert_with_returning 方法即可关闭“返回 id”行为。

class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
  def supports_insert_with_returning?
    false
  end
end
Run Code Online (Sandbox Code Playgroud)