我使用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
答案 0 :(得分:3)
在Sequel运行时,您不应以不兼容的方式更改数据库的结构。解决此问题的最简单方法是在更改数据库模式后重新启动进程,Sequel将选择新的数据库结构。
如果您真的想在不重新启动过程的情况下尝试执行此操作,则可以删除缓存的模式(@db.instance_variable_get(:@schemas).clear
),并为每个Sequel重置所有模型类的数据集(ModelClass.dataset = ModelClass.dataset
::模型)。但是,这并不一定会产生相同的结果,因为如果删除列,旧列名仍将为其定义一个方法。