PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana transaction_timestamp() Bekerja di PostgreSQL

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).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana current_time Bekerja di PostgreSQL

  2. Pengaturan Replikasi Slony-I Sederhana.

  3. Indeks Sebagian tidak digunakan dalam klausa ON CONFLICT saat melakukan upsert di Postgresql

  4. Peningkatan otomatis pada kunci primer parsial dengan Entity Framework Core

  5. Cara Mengotomatiskan Replikasi dan Failover PostgreSQL 12 dengan repmgr – Bagian 2