在同一个事务中,时间是不变的:
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=#