I created a function with VOLATILE directive. it's body looks like shown bellow ------------------------ cut start begin insert into monitor(ts, c1) values(LOCALTIMESTAMP, 'Step 1000'); -- start time -- query below runs for 20min insert ito t1 select * from big_table -- this timestamp should be bigger by 20min than start time insert into monitor(ts, c1) values(LOCALTIMESTAMP, 'Step 1001'); end ----------------------- cut end The value returned by LOCALTIMESTAMP function is the same in both places despite that actual interval of 20 min between these calls. I tried function now(),current_timestamp() but all of them behave similar. I don't believe that it's bug, probably it's a feature of the postgreSql database. Is any way to insert a timestamp within the same transaction that would have current system time (not time of the beginning of the transaction)? With other words, I would like to see different timestamps on first and last timestamp. Thank you, Vladimir