perl DBI和预处理语句名称冲突

时间:2014-02-10 15:10:19

标签: perl postgresql concurrency dbi

我正在使用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.

有没有办法传递预备语句的名称,以便我可以随机化并避免这种冲突?

3 个答案:

答案 0 :(得分:2)

该过程的分叉导致每个工人具有相同的dbh。确保每个都是唯一的固定问题。

答案 1 :(得分:0)

对于我的Mojolicious应用程序,我使用的是共享实例 DBIx::Connector

每当我需要数据库连接时,我都会询问连接器实例。断开和叉子会自动处理。

答案 2 :(得分:0)

永远不要将DB句柄传递给子进程。在子进程中创建句柄,你应该没问题。