localtimestamp始终返回相同的值

Pat*_*Pat 2 postgresql perl dbi

我最近将一个Perl应用程序表单移植到Postgres(我第一次使用Postgres),我被一个小问题困扰,我可以将其缩减为以下示例代码:

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);
}
Run Code Online (Sandbox Code Playgroud)

这输出:

2011-11-27 16:46:25.94291
2011-11-27 16:46:25.94291
2011-11-27 16:46:25.94291
Run Code Online (Sandbox Code Playgroud)

我总是得到相同的时间戳,除非我断开连接并重新连接到数据库.

我怎样才能确保从数据库中选择localtimestamp时,我得到的值与sql执行时的时间相对应?

Cit*_*ito 5

因为您没有使用自动提交,所以您始终处于同一事务中,而localtimestamp在Postgres中获取该事务开始时的时间戳.即,您需要使用$dbh->begin_work和为查询创建单独的事务$dbh->commit.