我正在使用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.
有没有办法传递预备语句的名称,以便我可以随机化并避免这种冲突?
答案 0 :(得分:2)
该过程的分叉导致每个工人具有相同的dbh。确保每个都是唯一的固定问题。
答案 1 :(得分:0)
对于我的Mojolicious应用程序,我使用的是共享实例 DBIx::Connector
每当我需要数据库连接时,我都会询问连接器实例。断开和叉子会自动处理。
答案 2 :(得分:0)
永远不要将DB句柄传递给子进程。在子进程中创建句柄,你应该没问题。