I want to insert one row in a table; e.g.:
INSERT INTO some_table VALUES (now(), now());
I want the date value in both the columns to be equal. Is the above query safe for this requirement? Or should I use other alternatives like sub-query/CTE:
INSERT INTO some_table (select t.now, t.now from (select now()) as t);
In general, how do these functions get invoked in SQL internally? How is the sequence (left to right/right to left) of functions to be invoked decided? Is a given function just called once and the return value cached for a single query? Is it vendor-specific?
The documentation says about now()
:
now() is a traditional PostgreSQL equivalent to transaction_timestamp()
And about transaction_timestamp()
:
These SQL-standard functions all return values based on the start time of the current transaction
So within one SQL statement, now()
will always return the same value.