我的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;
Run Code Online (Sandbox Code Playgroud)
这是输出:
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
Run Code Online (Sandbox Code Playgroud)
Postgres安装在本地机器上.为什么它总是同时返回?如何获得实时?
我用now()函数,结果相同.Postgres版本:9.3.4 x64.PHP版本:5.5.11
dec*_*eze 28
从TFM,突出我的:
9.9.4.当前日期/时间
PostgreSQL提供了许多返回与当前日期和时间相关的值的函数.这些SQL标准函数都根据当前事务的开始时间返回值:
Run Code Online (Sandbox Code Playgroud)CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_TIME(precision) CURRENT_TIMESTAMP(precision) LOCALTIME LOCALTIMESTAMP LOCALTIME(precision) LOCALTIMESTAMP(precision)...
由于这些函数返回当前事务的开始时间,因此它们的值在事务期间不会更改.这被认为是一个特征:目的是允许单个事务具有"当前"时间的一致概念,以便同一事务中的多个修改具有相同的时间戳.
PostgreSQL还提供了返回当前语句的开始时间的函数,以及调用函数时的实际当前时间.非SQL标准时间函数的完整列表是:
Run Code Online (Sandbox Code Playgroud)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(),它返回实际的当前时间,但是作为带格式的文本字符串而不是带有时区值的时间戳.now()是传统的PostgreSQL等价物transaction_timestamp().