ruby-on-rails - ActiveRecord、Postgres 和分区表

标签 ruby-on-rails postgresql activerecord rails-activerecord partitioning

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

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

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

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

最佳答案

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

class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
  def supports_insert_with_returning?
    false
  end
end

关于ruby-on-rails - ActiveRecord、Postgres 和分区表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4261476/

相关文章:

javascript - Google map 不显示 Rails 5 模型中的标记

ruby-on-rails - Rails更改X框架选项

ruby-on-rails - 从 rmagick 图像创建回形针附件

postgresql - 如何使我对一个 ID 的查询适用于多个 ID

ruby-on-rails - 优化 Rails 中的购买查询

ruby-on-rails - 是否有一些 Ruby on Rails 方法可以将模型对象转换为 HASH 结构?

postgresql 登录到另一个有冲突的表

PHP MYSQLI 获取错误

ruby-on-rails - Rails 3.2 ActiveRecord 事务

ruby-on-rails - 内部联接上的 Rails ActiveRecord 子查询