如何使用续集

时间:2017-04-18 13:46:06

标签: ruby sequel

我使用Sequel::Model.DB与我的数据库交互,但由于某种原因,数据库结构已更改,例如,通过数据库控制台。

此方法:

Sequel::Model.db.schema('table_name')

仍然会返回旧的数据库,我想从第一个连接缓存。

如何重置该缓存,或者理想情况下,确保每个请求上的实际数据库连接?

我每次都尝试使用新连接:

def db
  @db ||= Sequel.connect(Sequel::Model.db.opts)
end

但是,可以预见,我最终得到了这个错误:

Sequel::DatabaseConnectionError - PG::ConnectionBad: FATAL:  sorry, too many clients already

1 个答案:

答案 0 :(得分:3)

在Sequel运行时,您不应以不兼容的方式更改数据库的结构。解决此问题的最简单方法是在更改数据库模式后重新启动进程,Sequel将选择新的数据库结构。

如果您真的想在不重新启动过程的情况下尝试执行此操作,则可以删除缓存的模式(@db.instance_variable_get(:@schemas).clear),并为每个Sequel重置所有模型类的数据集(ModelClass.dataset = ModelClass.dataset ::模型)。但是,这并不一定会产生相同的结果,因为如果删除列,旧列名仍将为其定义一个方法。