在同一个事务中,时间是不变的:
postgres=# begin;
BEGIN
postgres=# select now(),current_time,current_timestamp,localtime,localtimestamp,transaction_timestamp();
now | current_time | current_timestamp | localtime | localtimestamp | transaction_timestamp
-------------------------------+--------------------+-------------------------------+-----------------+----------------------------+-------------------------------
2021-01-22 16:50:46.917081+08 | 16:50:46.917081+08 | 2021-01-22 16:50:46.917081+08 | 16:50:46.917081 | 2021-01-22 16:50:46.917081 | 2021-01-22 16:50:46.917081+08
(1 row)
postgres=# select pg_sleep_for('10 seconds');
pg_sleep_for
--------------
(1 row)
postgres=# select now(),current_time,current_timestamp,localtime,localtimestamp,transaction_timestamp();
now | current_time | current_timestamp | localtime | localtimestamp | transaction_timestamp
-------------------------------+--------------------+-------------------------------+-----------------+----------------------------+-------------------------------
2021-01-22 16:50:46.917081+08 | 16:50:46.917081+08 | 2021-01-22 16:50:46.917081+08 | 16:50:46.917081 | 2021-01-22 16:50:46.917081 | 2021-01-22 16:50:46.917081+08
(1 row)
postgres=#
要想获得在事务中某个语句执行的时间,可以使用clock_timestamp()
postgres=# begin;
BEGIN
postgres=# select statement_timestamp(),clock_timestamp();
statement_timestamp | clock_timestamp
-------------------------------+-------------------------------
2021-01-22 16:54:13.433445+08 | 2021-01-22 16:54:13.433605+08
(1 row)
postgres=# select pg_sleep_for('10 seconds');
pg_sleep_for
--------------
(1 row)
postgres=# select statement_timestamp(),clock_timestamp();
statement_timestamp | clock_timestamp
------------------------------+-------------------------------
2021-01-22 16:54:29.92086+08 | 2021-01-22 16:54:29.921041+08
(1 row)
postgres=#