Как получить реальное время в транзакции PostgreSQL?

Насколько я понимаю, теперь() возвращает то же время во время всей транзакции PostgreSQL? Но как получить реальное время?

Кроме того, меня интересует, есть ли какой-либо параметр конфигурации для ограничения продолжительности транзакции, чтобы после этого периода транзакция истечения немедленно сработала или каким-то другим образом запретила следующие запросы?

Ответ 1

Timeofday()

Может работать для вас.

Ответ 2

Используйте clock_timestamp().

now() является традиционным эквивалентом PostgreSQL для transaction_timestamp(), что эквивалентно CURRENT_TIMESTAMP. Эти функции возвращают время начала текущей транзакции. Их значения не изменяются во время транзакции.

statement_timestamp() возвращает время получения последнего сообщения команды от клиента.

clock_timestamp() возвращает фактическое текущее время, поэтому его значение изменяется даже в пределах одной команды SQL.

Для получения дополнительной информации см. документацию .

Ответ 3

Чтобы ограничить время оператора (а не транзакции), вы можете использовать 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=#