问题
I have created my tables with a column (type: timestamp with timezone) and set its default value to now()
(current_timestamp()
).
I run a series of inserts in separate statements in a single function and I noticed all the timestamps are equal down to the (ms), is the function value somehow cached and shared for the entire function call or transaction?
回答1:
That is expected and documented behaviour:
From the manual:
Since these functions return the start time of the current transaction, their values do not change during the transaction. This is considered a feature: the intent is to allow a single transaction to have a consistent notion of the "current" time, so that multiple modifications within the same transaction bear the same time stamp.
If you want something that changes each time you run a statement, you need to use statement_timestamp()
or even clock_timestamp()
(again see the description in the manual)
回答2:
now()
or current_timestamp
are STABLE functions returning the timestamp when the transaction started.
Consider one of the other options PostgreSQL offers, in particular statement_timestamp()
.
Per documentation:
statement_timestamp()
returns the start time of the current statement (more specifically, the time of receipt of the latest command message from the client)
来源:https://stackoverflow.com/questions/12216802/now-default-values-are-all-showing-same-timestamp