【发布时间】:2019-10-19 05:02:30
【问题描述】:
普通 DBI::db 处理程序将丢失所有使用 $dbh->do('SET variable_name=value') 进行的数据库会话设置。
是否有任何 DBIx::* 类/包等提供诸如“set_session”之类的方法来设置会话变量,并且可以在检测到连接丢失后恢复这些变量(90% 的实际情况下连接超时)?
它可能看起来像这样:
# inside the user code:
$dbh->set(variable => 'string', yet_another_variable => 42)
# inside the DBIx::* package:
sub reconnect {
# ...
while (my ($var, $val) = each %{$self->saved_vars}) {
$self->dbh->do("SET $var=?", {}, $val)
}
# ...
}
【问题讨论】:
-
推荐使用像DBIx::Connector这样的连接管理器或Mojo::Pg家族的东西,因为它会在需要和分叉时重新连接——你可以不用担心共享连接器对象,并检索句柄需要的时候。使用这些时,您可以使用相同的 DBI 回调或 connection event 来设置每个新连接。
-
@Grinnz ,使用 DBIx::SQLEngine 代替 DBIx::Connector 怎么样。看起来,DBIx::SQLEngine 中也实现了重连,但比 Connector 使用起来更简单
-
对我来说它看起来要复杂得多,而且年代久远。如果你想要一个也可以作为连接管理器的 ORM,理想的选择是DBIx::Class。