【发布时间】:2014-03-07 23:50:48
【问题描述】:
我正在使用 Perl 的 DBI 进行 postgreSQL 访问,我注意到当我有多个并发进程准备同一个查询时,它们似乎最终在服务器上使用相同的预准备语句名称,从而产生冲突。
2014-02-10 10:04:11.802650500 DBD::Pg::st execute failed: ERROR: prepared statement "dbdpg_p20307_185" already exists at /usr/sbin/mslrest.pl line 207.
2014-02-10 10:04:11.804659500 [Mon Feb 10 10:04:11 2014] [error] DBD::Pg::st execute failed: ERROR: prepared statement "dbdpg_p20307_185" already exists at /usr/sbin/mslrest.pl line 207.
有没有办法传入准备好的语句的名称,以便我可以随机化它并避免这种冲突?
【问题讨论】:
-
我想知道这是否可能是由于在两个进程中使用相同 dbh 的副本(由于分叉)造成的。你是吗?
-
不确定,我正在使用 Mojolicious::Lite 和 Hypnotoad。它很可能会分叉。我可以尝试重新连接以确保不共享 dbh...
-
是的,我想就是这样。作为一个快速测试,我重新连接了每个请求,并且没有出现问题。现在我可以提出一个适当的解决方案。谢谢!
-
你使用的是prepare()还是prepare_cached()?
标签: perl postgresql concurrency dbi