Di PostgreSQL, now()
fungsi mengembalikan tanggal dan waktu saat ini (termasuk offset zona waktu), pada awal transaksi saat ini.
Ini setara dengan transaction_timestamp()
fungsi.
Ini juga mirip dengan current_timestamp
fungsi (ketika dipanggil tanpa argumen).
now()
function tidak menerima parameter apa pun, jadi Anda tidak dapat menentukan presisinya, sedangkan current_timestamp
dapat dipanggil dengan atau tanpa parameter presisi.
Juga, now()
bukan standar SQL (seperti transaction_timestamp()
fungsi).
Sintaks
Sintaksnya seperti ini:
now()
Tidak ada argumen yang diperlukan atau diterima.
Contoh Dasar
Berikut adalah contoh dasar untuk didemonstrasikan.
SELECT now();
Hasil:
2020-07-02 09:51:12.088506+10
Dalam Transaksi
Berikut adalah contoh untuk mendemonstrasikan cara kerjanya dalam suatu transaksi.
BEGIN;
SELECT now();
SELECT pg_sleep(5);
SELECT now();
SELECT pg_sleep(5);
SELECT now();
COMMIT;
Inilah hasil lengkap dalam terminal saya saat menggunakan psql:
postgres=# BEGIN; BEGIN postgres=# SELECT now(); now ------------------------------- 2020-07-02 09:51:53.905091+10 (1 row) postgres=# SELECT pg_sleep(5); pg_sleep ---------- (1 row) postgres=# SELECT now(); now ------------------------------- 2020-07-02 09:51:53.905091+10 (1 row) postgres=# SELECT pg_sleep(5); pg_sleep ---------- (1 row) postgres=# SELECT now(); now ------------------------------- 2020-07-02 09:51:53.905091+10 (1 row) postgres=# COMMIT; COMMIT
Ketiga nilai waktu adalah identik, meskipun pg_sleep()
fungsi digunakan untuk menunda eksekusi antara setiap panggilan ke now()
, yang masing-masing kebetulan berada dalam pernyataan SQL-nya sendiri.
Jadi kita dapat melihat bahwa waktu yang dikembalikan untuk setiap pernyataan didasarkan pada waktu mulai transaksi saat ini – bukan pernyataan. Itu tidak berubah saat transaksi berlangsung.
Hal ini memungkinkan satu transaksi memiliki gagasan yang konsisten tentang waktu "saat ini", sehingga beberapa modifikasi dalam transaksi yang sama memiliki cap waktu yang sama.
Beberapa Panggilan dalam Satu Pernyataan
Itu juga tidak berubah seiring berjalannya pernyataan.
\x
SELECT
now(),
pg_sleep(5),
now(),
pg_sleep(5),
now();
Hasil (menggunakan keluaran vertikal):
now | 2020-07-02 09:53:33.766806+10 pg_sleep | now | 2020-07-02 09:53:33.766806+10 pg_sleep | now | 2020-07-02 09:53:33.766806+10
Sekali lagi, ketiga nilai waktu adalah identik, meskipun pg_sleep()
fungsi digunakan untuk menunda eksekusi antara setiap panggilan ke now()
.
Ini berbeda dengan statement_timestamp()
, yang melakukannya ubah dengan setiap pernyataan, dan juga clock_timestamp()
fungsi, yang berubah bahkan saat itu berkembang melalui setiap pernyataan (jika dipanggil beberapa kali dalam pernyataan).