我曾经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)
当 Sequel 运行时,您不应该以不兼容的方式更改数据库的结构。解决这个问题最简单的方法就是在更改数据库模式后重新启动进程,Sequel 将采用新的数据库结构。
如果您确实想尝试在不重新启动进程的情况下执行此操作,则可以删除缓存的架构 ( @db.instance_variable_get(:@schemas).clear),并重置所有模型类的数据集(ModelClass.dataset = ModelClass.dataset对于每个 Sequel::Model)。但是,这并不一定会导致相同的结果,因为如果删除列,旧列名仍将具有为其定义的方法。
| 归档时间: |
|
| 查看次数: |
758 次 |
| 最近记录: |