如何使用 Sequel 刷新数据库连接

okl*_*liv 0 ruby sequel

我曾经Sequel::Model.DB与数据库进行交互,但由于某种原因,数据库结构发生了更改,例如通过数据库控制台。

这个方法:

Sequel::Model.db.schema('table_name')
Run Code Online (Sandbox Code Playgroud)

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

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

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

def db
  @db ||= Sequel.connect(Sequel::Model.db.opts)
end
Run Code Online (Sandbox Code Playgroud)

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

Sequel::DatabaseConnectionError - PG::ConnectionBad: FATAL:  sorry, too many clients already
Run Code Online (Sandbox Code Playgroud)

Jer*_*ans 5

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

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

  • @okliv 祝你好运(看起来像一个我会尽力避免的兔子洞) (2认同)