如何使用无限循环的 plperl 函数终止会话?
两者pg_terminate_backend
都pg_cancel_backend
没有效果。kill -1 pid
什么也没做,kill -9 pid
服务器崩溃了。
如何使用无限循环的 plperl 函数终止会话?
两者pg_terminate_backend
都pg_cancel_backend
没有效果。kill -1 pid
什么也没做,kill -9 pid
服务器崩溃了。
这不是我第一次在 Postgresql 中添加 perl 函数时收到这个奇怪的通知:
NOTICE: elseif should be elsif at line 11.
这发生在 CREATE FUNCTION 以及使用函数时。当然,我尝试使用 elsif 进行更改,但随后因语法错误而失败。
任何建议将不胜感激(即使我可以应付该通知)
这是我的代码:
CREATE FUNCTION hds_updatewebservers_products(character varying)
RETURNS boolean
AS
$_$
my $product_ref = @_[0];
# Launch update
$checkexitcode = system ("sudo -u dbliveud /home/dbliveud/scripts/maj/launch-all.sh " . $product_ref . " ");
if ($checkexitcode > 0) {
# Error while updating
return false;
} elseif {
# Ok update done
return true;
}
$_$
LANGUAGE plperlu STRICT;
我使用 DBI。我想做一些像
INSERT INTO ... VALUES (the_generated_timestamp, ...);
命令是什么?它是如何创建的,perlocaltime
标量值具有非常复杂的、针对人眼优化的格式(fe Mon Apr 28 15:58:51 2014
)。我的目标有点像 unixgettimeofday()
所做的(归还自 1970.1.1 以来的秒数),由一些格式字符串转换,我可以让 Oracle 吃掉它。
但任何更简单的解决方案也可以,如果存在的话。
它需要在 perl 中生成。INSERT ... (current_timestamp, ...)
不行。
我觉得我的 SQL 连接一定有问题。我通常忽略了它,但我最终会尝试深入了解它。
my $dsn = "DBI:Oracle:host=$host;sid=$sid";
my $dbh = DBI->connect($dsn,$dbuser,$dbpass,{ RaiseError => 1,AutoCommit => 0 }) or die("Unable to connect: $DBI::errstr");
我每次跑步都需要 60 秒DBI->connect
。相当大的查询可能需要一些时间,网络延迟可能会导致一些延迟,但所有这些都在连接所需的 60 秒之上。我可以DBI->connect
在不实际运行查询的情况下运行然后立即关闭它,这将需要 60 秒。我可以使用不同的工具毫无问题地查询这个数据库,但是任何时候我DBI->connect
对它运行,都需要 60 秒。我的大多数查询都以 61.2 秒、63.4 秒或 65.3 秒的时间返回。无论如何,从脚本点击 DBI->connect 到它点击下一行的时间是 60 秒。我什至在前一行和后一行都加盖了时间戳。时间戳之间的唯一内容是DBI->connect
.
我究竟做错了什么?