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

Bagaimana current_timestamp() Bekerja di PostgreSQL

Di PostgreSQL, current_timestamp() fungsi mengembalikan tanggal dan waktu saat ini, termasuk offset zona waktu.

Stempel waktu yang dikembalikan didasarkan pada waktu mulai transaksi saat ini.

Sintaks

Anda dapat menggunakannya dengan salah satu cara berikut:

current_timestamp
current_timestamp(x)

Dimana x adalah parameter presisi opsional, yang menyebabkan hasilnya dibulatkan menjadi x jumlah digit pecahan di bidang detik.

Tanpa parameter presisi (sintaks pertama), hasilnya diberikan ke presisi penuh yang tersedia.

Contoh – Presisi Penuh

Berikut adalah contoh dasar untuk mendemonstrasikan hasil menggunakan presisi penuh yang tersedia.

SELECT current_timestamp;

Hasil:

2020-07-01 15:42:35.630594+10

Contoh – Presisi Spesifik

Berikut adalah contoh untuk mendemonstrasikan cara menentukan presisi.

SELECT current_timestamp(0);

Hasil:

2020-07-01 15:42:58+10

Dalam contoh ini, saya menetapkan presisi nol, yang berarti tidak ada pecahan detik yang dikembalikan.

Berikut contoh lain di mana saya menentukan jumlah detik pecahan.

SELECT current_timestamp(3);

Hasil:

2020-07-01 15:43:16.644+10

Transaksi

Stempel waktu aktual didasarkan pada waktu mulai transaksi saat ini. Oleh karena itu, 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.

Berikut adalah contoh yang menunjukkan hal ini.

BEGIN;
SELECT current_timestamp;
SELECT pg_sleep(5);
SELECT current_timestamp;
SELECT pg_sleep(5);
SELECT current_timestamp;
COMMIT;

Berikut adalah output lengkap dari terminal saya saat menjalankan transaksi tersebut di psql:

postgres=# BEGIN;
BEGIN
postgres=# SELECT current_timestamp;
       current_timestamp       
-------------------------------
 2020-07-02 09:02:52.952669+10
(1 row)


postgres=# SELECT pg_sleep(5);
 pg_sleep 
----------
 
(1 row)


postgres=# SELECT current_timestamp;
       current_timestamp       
-------------------------------
 2020-07-02 09:02:52.952669+10
(1 row)


postgres=# SELECT pg_sleep(5);
 pg_sleep 
----------
 
(1 row)


postgres=# SELECT current_timestamp;
       current_timestamp       
-------------------------------
 2020-07-02 09:02:52.952669+10
(1 row)


postgres=# COMMIT;
COMMIT

Ketiga nilai waktu itu identik, meskipun pg_sleep() fungsi yang digunakan untuk menunda eksekusi antara setiap pernyataan dalam transaksi.

Ini berbeda dengan statement_timestamp() yang melakukannya berubah dengan setiap pernyataan.

Beberapa Panggilan dalam Satu Pernyataan

Itu juga tidak berubah seiring berjalannya pernyataan.

\x
SELECT 
  current_timestamp,
  pg_sleep(5),
  current_timestamp,
  pg_sleep(5),
  current_timestamp;

Hasil (menggunakan keluaran vertikal):

current_timestamp | 2020-07-02 09:04:03.413062+10
pg_sleep          | 
current_timestamp | 2020-07-02 09:04:03.413062+10
pg_sleep          | 
current_timestamp | 2020-07-02 09:04:03.413062+10

Ketiga nilai waktu itu identik, meskipun pg_sleep() fungsi digunakan untuk menunda eksekusi antara setiap panggilan ke current_timestamp .

Ini berbeda dengan clock_timestamp() fungsi, yang melakukannya berubah seiring berjalannya pernyataan.

Omong-omong, saya menggunakan output vertikal (juga dikenal sebagai output yang diperluas) untuk membuat hasilnya sedikit lebih ringkas.

Anda dapat mengaktifkan output yang diperluas di psql menggunakan \x .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Membuat Pengguna dengan pgAdmin

  2. Pendaftaran early bird dibuka untuk PGDay.IT 2011

  3. 7 Tips Praktik Terbaik untuk Pemuatan Data Massal PostgreSQL

  4. PostgreSQL unnest() dengan nomor elemen

  5. Bagaimana saya bisa mengubah kolom yang ada sebagai Identitas di PostgreSQL 11.1