postgresql - Perl PostgreSQL 查询执行两次

标签 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 execute failed: ERROR: role "tesstt" already exists CONTEXT: SQL statement "CREATE USER tesstt WITH PASSWORD '123'" PL/pgSQL function createuserwithpassword(character varying,character varying) line 3 at EXECUTE statement at homework2.pl line 39, line 1. DBD::Pg::st execute failed: ERROR: role "tesstt" already exists CONTEXT: SQL statement "CREATE USER tesstt WITH PASSWORD '123'" PL/pgSQL function createuserwithpassword(character varying,character varying) line 3 at EXECUTE statement at homework2.pl line 39, line 1.

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

提前致谢...

最佳答案

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

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

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

关于postgresql - Perl PostgreSQL 查询执行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30221100/

相关文章:

laravel - 带有 Laravel 的 Postgresql : Filter Json field with substring

sql - 从一个表中选择,根据条件插入到另外两个表中

regex - 这个 perl 正则表达式的含义是什么?

sql - 如何在 postgresql 中排除上下文引发异常

sql - 使用列名之一的 Postgres FROM 查询

regex - 提取价格文本时的 postgresql 正则表达式分组 + 转换问题

database - 当浏览器重新加载/返回时,如何防止再次写入数据库?

linux - 如何退出 perl 脚本中的 chroot?

postgresql - 如何正确取消嵌套两个数组

postgresql - PL/pgSQL 函数中的可选参数