【问题标题】:Perl PostgreSQL queries executes twicePerl PostgreSQL 查询执行两次
【发布时间】:2015-05-13 17:02:05
【问题描述】:

我试图了解它发生的原因,但我找不到它。 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 执行失败:错误:角色“testst”已经存在 上下文:SQL 语句“创建用户 teststt WITH PASSWORD '123'” PL/pgSQL 函数 createuserwithpassword(字符变化,字符 变化)在 homework2.pl 第 39 行的 EXECUTE 语句中的第 3 行, 第 1 行 DBD::Pg::st 执行失败:错误:角色“testst”已经 存在 CONTEXT: SQL 语句 "CREATE USER testtt WITH PASSWORD '123'" PL/pgSQL 函数 createuserwithpassword(字符 变化,字符变化)在 homework2.pl 的 EXECUTE 语句中的第 3 行 第 39 行,第 1 行。

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

提前谢谢...

【问题讨论】:

    标签: postgresql perl plpgsql


    【解决方案1】:

    您有PrintError =&gt; 1,它会在出错时打印一条错误消息。

    您有RaiseError =&gt; 1,它会引发包含错误消息的异常。未捕获的异常在程序结束时被打印出来。

    PrintError =&gt; 0 添加到传递给DBI-&gt;connect 的选项中。

    【讨论】:

    • 感谢您的关注,我有 PrintError => 1 吗?我在哪里?我应该在哪里添加 PrintError => 0,你能指定更多吗?
    • 这是connect 的选项之一。这是默认设置。
    • allrigth 但我应该如何添加到 PrintError => 0 ?我应该在哪里?
    • 将其添加到connect 的选项中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    相关资源
    最近更新 更多