Postgres documentation says that
"now()
is a traditional
PostgreSQL equivalent to
transaction_timestamp()
".
Also both use the same implementation.
But them have different parallel safety property:
postgres=# \df+ now
List of functions
Schema | Name | Result data type | Argument data types | Type | Volatility | Parallel | Owner | Security | Access privileges | Language |
Source code | Description
------------+------+--------------------------+---------------------+------+------------+------------+----------+----------+-------------------+----------+
-------------+--------------------------
pg_catalog | now | timestamp with time zone | | func | stable | restricted | knizhnik | invoker | | internal |
now | current transaction time
(1 row)
postgres=# \df+ transaction_timestamp
List of functions
Schema | Name | Result data type | Argument data types | Type | Volatility | Parallel | Owner | Security | Access privileg
es | Language | Source code | Description
------------+-----------------------+--------------------------+---------------------+------+------------+----------+----------+----------+----------------
---+----------+-------------+--------------------------
pg_catalog | transaction_timestamp | timestamp with time zone | | func | stable | safe | knizhnik | invoker |
| internal | now | current transaction time
(1 row)
As a result using now() in query disable parallel execution while transaction_timestamp allows it.
Was it done intentionally or it is just a bug?
--
Konstantin Knizhnik
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company