Ответ 1
Timeofday()
Может работать для вас.
Насколько я понимаю, теперь() возвращает то же время во время всей транзакции PostgreSQL? Но как получить реальное время?
Кроме того, меня интересует, есть ли какой-либо параметр конфигурации для ограничения продолжительности транзакции, чтобы после этого периода транзакция истечения немедленно сработала или каким-то другим образом запретила следующие запросы?
Timeofday()
Может работать для вас.
Используйте clock_timestamp()
.
now()
является традиционным эквивалентом PostgreSQL для transaction_timestamp()
, что эквивалентно CURRENT_TIMESTAMP
. Эти функции возвращают время начала текущей транзакции. Их значения не изменяются во время транзакции.
statement_timestamp()
возвращает время получения последнего сообщения команды от клиента.
clock_timestamp()
возвращает фактическое текущее время, поэтому его значение изменяется даже в пределах одной команды SQL.
Для получения дополнительной информации см. документацию .
Чтобы ограничить время оператора (а не транзакции), вы можете использовать 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=#