PL/pgSQL块是怎么编译的?

How is compiled PL/pgSQL block?

   do $$
  declare 
   tm1 timestamp without time zone;
   tm2 timestamp without time zone;
  begin
     select localtimestamp(0) into tm1;
     for i in 1..200000000 loop
        --just waiting several second
     end loop;
     select localtimestamp(0) into tm2;

      raise notice '% ; %', tm1, tm2;
  end;
  $$ language plpgsql

为什么给这个过程 tm1tm2 相同的值?

这段代码不是一步步执行的吗?

From the manual

These SQL-standard functions all return values based on the start time of the current transaction [...] 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

(强调我的)

你可能想要clock_timestamp()