Різниці немає. Три цитати з посібника:
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, що відображається в отриманій назві стовпця , яка була "зараз", але змінена на "current_timestamp" у Postgres 10.
transaction_timestamp() робить те саме, але ця функція є належною функцією Postgres, тому псевдонім за замовчуванням завжди був "transak_timestamp".
Ви НЕ плутайте небудь з цих функцій зі спеціальною константою введення'now' . Це лише одна з декількох примітних скорочень для конкретних значень дати / часу / часової позначки, цитуючи посібник:
... що буде перетворено на звичайні значення дати / часу при прочитанні. (Зокрема, nowі пов'язані рядки перетворюються на певне значення часу, як тільки вони прочитаються.) Усі ці значення потрібно укласти в окремі лапки, коли вони використовуються як константи в SQL-командах.
Це може додати плутанини, що (принаймні до Постгресу 12) будь-яка кількість провідних і кінцевих пробілів і дужок ( {[( )]}) обрізана з цих спеціальних вхідних значень. Отож 'now()'::timestamptz- або 'now()'там, де не потрібен чіткий вигляд типів - також є дійсним і він має оцінюватися за тією ж міткою часу, що і функція now() в більшості контекстів . Але це константи і, як правило, не те, що потрібно, наприклад, за замовчуванням стовпця.
db <> fiddle тут
Стара SQL скрипка
Помітними альтернативами є statement_timestamp()і clock_timestamp(). Посібник:
statement_timestamp()повертає час початку поточного оператора (точніше, час отримання останнього повідомлення команди від клієнта). [...]
clock_timestamp()повертає фактичний поточний час, і тому його значення змінюється навіть у межах однієї команди SQL.
Примітка: statement_timestamp()це , STABLEяк зазначено вище (завжди повертає те ж значення в межах однієї і тієї ж команди SQL). Але clock_timestamp()обов'язково є тільки VOLATILE. Різниця може бути значною.
where items.createddate > now():?