我最近已经将Perl应用程序表单甲骨文移植到Postgres(我第一次使用Postgres),并且我被一个小问题难倒,我可以将其缩小到以下示例代码:localtimestamp总是返回相同的值
use strict;
use warnings;
use DBI;
my @db_params = qw (dbi:Pg:host=127.0.0.1;database=test test test);
my $dbh = DBI->connect(@db_params, {AutoCommit => 0 }) or die ;
while (1) {
my $sth = $dbh->prepare_cached('SELECT localtimestamp ') or die;
$sth->execute() or die;
my $result = $sth->fetchall_arrayref();
print $result->[0][0] , "\n";
sleep(5);
}
此输出:
2011-11-27 16:46:25.94291
2011-11-27 16:46:25.94291
2011-11-27 16:46:25.94291
我收到相同的时间戳所有的时间,除非我断开并重新连接到数据库。
我怎样才能确保有时间我从数据库中选择localtimestamp我得到的值与执行sql的时间相对应?
你说得对!奇怪的是,我没有指出Oracle和Pg之间的交易工作方式不同。原始代码在Oracle中按预期工作,无需提交事务! – Pat
的确如此,Oracle的行为有所不同,但如果您在一次事务中更改一堆行的时间戳,那么如果他们获得完全相同的时间戳,对我来说更有意义。 – Cito
在交易中发生的所有事情都被认为会在同一时间发生。 PostgreSQL处理交易中的时间戳在逻辑上更准确。 –