Нет никакой разницы. Три цитаты из руководства:
1)
Все эти стандартные функции SQL возвращают значения, основанные на времени начала текущей транзакции:
...
...
CURRENT_TIMESTAMP
2)
transaction_timestamp()
эквивалентно CURRENT_TIMESTAMP
, но назван так, чтобы четко отражать то, что он возвращает.
3)
now()
является традиционным PostgreSQL эквивалентом transaction_timestamp()
.
Жирный акцент мой. CURRENT_TIMESTAMP
, transaction_timestamp()
И now()
делать точно то же самое. CURRENT_TIMESTAMP
является синтаксической странностью для функции, не имеющей завершающей пары скобок. Это в соответствии со стандартом SQL.
Если вы не объявляете псевдоним столбца для вызова функции в операторе SQL, псевдонимом по умолчанию является имя функции. Внутренне стандарт SQL CURRENT_TIMESTAMP
реализован с помощью now()
. Вплоть до Postgres 9.6, который отображается в имени получающегося столбца , которое было «сейчас», но в Postgres 10 было изменено на «current_timestamp».
transaction_timestamp()
делает то же самое, но эта функция является надлежащей функцией Postgres, поэтому псевдоним по умолчанию всегда был «action_timestamp ».
Вы не путайте либо из этих функций со специальной константой ввода'now'
. Это всего лишь один из нескольких обозначений для конкретных значений даты / времени / метки времени, цитируя руководство:
... которые будут преобразованы в обычные значения даты / времени при чтении. (В частности, now
и связанные строки преобразуются в определенное значение времени, как только они прочитаны.) Все эти значения должны быть заключены в одинарные кавычки при использовании в качестве констант в командах SQL.
Это может добавить к путанице, что (по крайней мере до Postgres 12) любое количество начальных и конечных пробелов и скобок ( {[( )]}
) обрезается от этих специальных входных значений. Таким образом 'now()'::timestamptz
- или просто 'now()'
там, где явное приведение типов не требуется - также допустимо и now()
в большинстве случаев вычисляется с той же временной меткой, что и функция . Но это константы и, как правило, не те, которые вы хотите, например, по умолчанию для столбцов.
db <> скрипка здесь
Старая скрипка SQL
Известные альтернативы statement_timestamp()
и clock_timestamp()
. Руководство:
statement_timestamp()
возвращает время начала текущего оператора (точнее, время получения последнего командного сообщения от клиента). [...]
clock_timestamp()
возвращает фактическое текущее время, и, следовательно, его значение изменяется даже в пределах одной команды SQL.
Примечание: statement_timestamp()
это , STABLE
как указано выше (всегда возвращает то же значение в пределах одной и той же команды SQL). Но clock_timestamp()
обязательно есть только VOLATILE
. Разница может быть значительной.
where items.createddate > now()
:?