How to get a real time within PostgreSQL transaction?
Use clock_timestamp()
.
now()
is a traditional PostgreSQL equivalent to transaction_timestamp()
, which is equivalent to CURRENT_TIMESTAMP
. These functions return the start time of the current transaction. Their values do not change during the transaction.
statement_timestamp()
returns the time of receipt of the latest command message from the client.
clock_timestamp()
returns the actual current time, and therefore its value changes even within a single SQL command.
For more information see the documentation.
To limit the time of a statement (not a transaction) you can use statement_timeout. now() will increment on each execution if not within a transaction block. Thus:
postgres=# select now(); now ------------------------------- 2010-08-11 13:44:36.207614-07(1 row)postgres=# select now(); now ------------------------------- 2010-08-11 13:44:36.688054-07(1 row)postgres=# select now(); now ------------------------------- 2010-08-11 13:44:40.407623-07(1 row)postgres=# begin;BEGINpostgres=# select now(); now ------------------------------- 2010-08-11 13:44:43.417611-07(1 row)postgres=# select now(); now ------------------------------- 2010-08-11 13:44:43.417611-07(1 row)postgres=#