As far as I understand now() returns the same time during the whole PostgreSQL transaction? But how to get real time?
Also, I am interested
Timeofday()
May work for you.
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;
BEGIN
postgres=# 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=#
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.