Есть ли разница между функциями PostgreSQL now () иaction_timestamp ()? - PullRequest
0 голосов
/ 23 апреля 2019

В официальной документации , обе функции имеют одинаковое описание:

Текущая дата и время (начало текущей транзакции)

Isесть разница между двумя функциями, и если нет, то почему обе существуют?Спасибо.

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

now и transaction_timestamp эквивалентны стандарту SQL current_timestamp.Все сообщают время начала транзакции.

С точки зрения транзакций, есть две временные метки, о которых стоит подумать.начало транзакции и время выполнения каждого отдельного оператора. Концептуально существует также время окончания транзакции, которое можно получить, выполнив select statement_timestamp() trx_end_timestamp в самом конце, непосредственно перед фиксацией / откатом.

Если вы запустите следующеев psql [скопировать всю строку и вставить в psql shell]

BEGIN; SELECT PG_SLEEP(5); SELECT NOW(), CURRENT_TIMESTAMP, TRANSACTION_TIMESTAMP(), STATEMENT_TIMESTAMP(); COMMIT;

Я получил такой вывод:

              now              |       current_timestamp       |     transaction_timestamp     |      statement_timestamp
-------------------------------+-------------------------------+-------------------------------+-------------------------------
 2019-04-23 11:15:18.676855-04 | 2019-04-23 11:15:18.676855-04 | 2019-04-23 11:15:18.676855-04 | 2019-04-23 11:15:23.713275-04
(1 row)

Вы можете ясно видеть, что NOW, CURRENT_TIMESTAMP, TRANSACTION_TIMESTAMP эквивалентны, а STATEMENT_TIMESTAMP имеет 5-секундное смещение, потому что мы спали в течение 5 секунд.

Кстати, CURRENT_TIMESTAMP в стандарте sql.Другие специфичны для postgresql, , хотя другие базы данных также могут реализовывать их

1 голос
/ 23 апреля 2019

Ответ в вашей документации:

now () - это традиционный PostgreSQL, эквивалентный transaction_timestamp ().

Итак, они одинаковы, и они здесь для исторической / обратной совместимости, и некоторые могут поспорить за простоту имени функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...