How to get a real time within PostgreSQL transaction? How to get a real time within PostgreSQL transaction? postgresql postgresql

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=#