Perl PostgreSQL查询执行两次

时间:2015-05-13 17:02:05

标签: postgresql perl plpgsql

我试图理解为什么会这样,但我找不到它。 SQL查询执行两次。

我的剧本:

my $driver = "Pg"; # Driver Name
my $database = $ARGV[0]; # First argument will be database name
my $dsn = "DBI:$driver:dbname=$database;host=127.0.0.1;port=5432";
my $userid = $ARGV[1]; # second argument will be username
my $password = $ARGV[2]; # third argument will be passwd
my $dbh = DBI->connect($dsn,$userid,$password,  {RaiseError => 1 }) or die $DBI::errstr;

sub f_createUser {
    if (scalar @_ != 3 ) {
        return;
    }
    my $query = $dbh->prepare(qq{ SELECT createUserWithPassword(?,?) });
    #my $result = $dbh->do($query) < 0 ? say "$DBI::errstr" : "# >>> Query worked successfully";
    $query->execute($_[1],$_[2]);
}

&f_createUser(@revelantArray);

当我执行脚本时,我得到了:

  

DBD :: Pg :: st执行失败:ERROR:角色“tesstt”已经存在   语境:SQL语句“CREATE USER tesstt WITH PASSWORD'123'”   PL / pgSQL函数createuserwithpassword(字符变化,字符   变更)第3行在homework2.pl第39行的EXECUTE语句中,   第1行.DBD :: Pg :: st执行失败:ERROR:角色“tesstt”已经存在   exists语境:SQL语句“CREATE USER tesstt WITH PASSWORD   '123'“PL / pgSQL函数createuserwithpassword(字符   在homework2.pl的EXECUTE语句中的第3行变化,变化   第39行,第1行。

为什么会这样?我错过了什么?

提前致谢...

1 个答案:

答案 0 :(得分:5)

您有PrintError => 1,会在出错时输出错误消息。

您有RaiseError => 1,它会抛出一个包含错误消息的异常。在结束程序时会打印未捕获的异常。

PrintError => 0添加到传递给DBI->connect的选项。