我的PHP脚本将工作几秒钟,我需要随时从Postgres数据库获得实时时间戳。但是当我从Postgres获取current_timestamp时,它总是返回相同的值。
这是我的示例脚本(使用DBAL):
echo "DB:" . $dbal->fetchColumn("select current_timestamp") . PHP_EOL;
echo "PHP: " . date("Y-m-d H:i:s") . PHP_EOL;
sleep(3);
echo "DB:" . $dbal->fetchColumn("select current_timestamp") . PHP_EOL;
echo "PHP: " . date("Y-m-d H:i:s") . PHP_EOL;
sleep(3);
echo "DB:" . $dbal->fetchColumn("select current_timestamp") . PHP_EOL;
echo "PHP: " . date("Y-m-d H:i:s") . PHP_EOL;
这是输出:
DB:2014-05-07 11:59:50.118+04
PHP: 2014-05-07 11:59:50
DB:2014-05-07 11:59:50.118+04
PHP: 2014-05-07 11:59:53
DB:2014-05-07 11:59:50.118+04
PHP: 2014-05-07 11:59:56
Postgres安装在本地计算机上。为什么它总是同时返回? 如何获得实时?
我用now()函数,结果相同。 Postgres版本:9.3.4 x64。 PHP版本:5.5.11
答案 0 :(得分:19)
从TFM突出显示我的:
9.9.4。当前日期/时间
PostgreSQL提供了许多返回值相关的函数 到目前的日期和时间。这些SQL标准函数全部 根据当前交易的开始时间返回值:
CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_TIME(precision) CURRENT_TIMESTAMP(precision) LOCALTIME LOCALTIMESTAMP LOCALTIME(precision) LOCALTIMESTAMP(precision)
...
由于这些函数返回当前的开始时间 交易,他们的价值在交易期间不会改变。这个 被认为是一个特征:意图是允许单个事务 要有一个一致的“当前”时间概念,那么多重 同一交易中的修改带有相同的时间戳。
PostgreSQL还提供了返回开始时间的函数 当前声明,以及当前的实际当前时间 该函数被调用。非SQL标准时间的完整列表 功能是:
transaction_timestamp() statement_timestamp() clock_timestamp() timeofday() now()
transaction_timestamp()
相当于CURRENT_TIMESTAMP
,但是。{ 命名以清楚地反映它返回的内容。statement_timestamp()
返回当前语句的开始时间(更具体地说, 从客户端收到最新命令消息的时间)。statement_timestamp()
和transaction_timestamp()
返回相同内容 在事务的第一个命令期间的值,但可能不同 在后续命令中。clock_timestamp()
返回实际值 当前时间,因此即使在单个SQL中,其值也会发生变化 命令。timeofday()
是历史PostgreSQL函数。喜欢clock_timestamp()
,它返回实际的当前时间,但是作为a 格式化文本字符串,而不是带有时区值的时间戳。now()
是与transaction_timestamp()
等效的传统PostgreSQL。