Насколько я понимаю теперь (), возвращает то же время во время целой транзакции PostgreSQL? Но как получить реальное время?
Кроме того, мне интересно, если там какой-либо параметр конфигурации для ограничения продолжительности транзакции, так, чтобы после того, как эта транзакция истечения периода сразу привела бы к сбою или так или иначе еще запретила бы следующие запросы?
Чтобы ограничить время выполнения инструкции (не транзакции), вы можете использовать statement_timeout. now () будет увеличиваться при каждом выполнении , если не входит в блок транзакции. Таким образом:
postgres=# select now();
now
-------------------------------
2010-08-11 13:44:36.207614-07
(1 row)
postgres=# select now();
now
-------------------------------
2010-08-11 13:44:36.688054-07
(1 row)
postgres=# select now();
now
-------------------------------
2010-08-11 13:44:40.407623-07
(1 row)
postgres=# begin;
BEGIN
postgres=# select now();
now
-------------------------------
2010-08-11 13:44:43.417611-07
(1 row)
postgres=# select now();
now
-------------------------------
2010-08-11 13:44:43.417611-07
(1 row)
postgres=#