我最近已經將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處理交易中的時間戳在邏輯上更準確。 –