我根据 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/