Di PostgreSQL, transaction_timestamp()
fungsi mengembalikan tanggal dan waktu saat ini (termasuk offset zona waktu), pada awal transaksi saat ini.
Ini setara dengan fungsi Postgres tradisional now()
.
Ini juga mirip dengan current_timestamp
function (ketika dipanggil tanpa argumen), kecuali bahwa itu dinamai untuk secara jelas mencerminkan apa yang dilakukannya.
transaction_timestamp()
function tidak menerima parameter apa pun, jadi Anda tidak dapat menentukan presisinya, sedangkan current_timestamp
dapat dipanggil dengan atau tanpa parameter presisi.
Juga, transaction_timestamp()
adalah fungsi non-SQL-standar.
Sintaks
Sintaksnya seperti ini:
transaction_timestamp()
Tidak ada argumen yang diperlukan atau diterima.
Contoh Dasar
Berikut adalah contoh dasar untuk didemonstrasikan.
SELECT transaction_timestamp();
Hasil:
2020-07-02 08:23:08.810484+10
Dalam Transaksi
Berikut adalah contoh untuk mendemonstrasikan cara kerjanya dalam suatu transaksi.
BEGIN;
SELECT transaction_timestamp();
SELECT pg_sleep(5);
SELECT transaction_timestamp();
SELECT pg_sleep(5);
SELECT transaction_timestamp();
COMMIT;
Inilah hasil lengkap dalam terminal saya saat menggunakan psql:
postgres=# BEGIN; BEGIN postgres=# SELECT transaction_timestamp(); transaction_timestamp ------------------------------- 2020-07-02 08:27:04.229266+10 (1 row) postgres=# SELECT pg_sleep(5); pg_sleep ---------- (1 row) postgres=# SELECT transaction_timestamp(); transaction_timestamp ------------------------------- 2020-07-02 08:27:04.229266+10 (1 row) postgres=# SELECT pg_sleep(5); pg_sleep ---------- (1 row) postgres=# SELECT transaction_timestamp(); transaction_timestamp ------------------------------- 2020-07-02 08:27:04.229266+10 (1 row) postgres=# COMMIT; COMMIT
Ketiga nilai waktu itu identik, meskipun pg_sleep()
fungsi digunakan untuk menunda eksekusi antara setiap panggilan ke transaction_timestamp()
, 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
transaction_timestamp(),
pg_sleep(5),
transaction_timestamp(),
pg_sleep(5),
transaction_timestamp();
Hasil (menggunakan keluaran vertikal):
transaction_timestamp | 2020-07-02 09:15:56.154175+10 pg_sleep | transaction_timestamp | 2020-07-02 09:15:56.154175+10 pg_sleep | transaction_timestamp | 2020-07-02 09:15:56.154175+10
Sekali lagi, ketiga nilai waktu adalah identik, meskipun pg_sleep()
fungsi digunakan untuk menunda eksekusi antara setiap panggilan ke transaction_timestamp()
.
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).