Di PostgreSQL, Anda dapat menggunakan pg_sleep_until()
berfungsi untuk menunda eksekusi hingga stempel waktu yang ditentukan.
Ini berguna ketika waktu bangun tertentu diinginkan.
Perhatikan bahwa pg_sleep_until
tidak dijamin untuk bangun tepat pada waktu yang ditentukan, tetapi tidak akan bangun lebih awal.
Sintaks
Sintaksnya seperti ini:
pg_sleep_until(timestamp with time zone)
Contoh
Berikut ini contoh untuk mendemonstrasikan penggunaannya.
\x
SELECT
clock_timestamp(),
pg_sleep_until('today 15:30'),
clock_timestamp();
Hasil (menggunakan keluaran vertikal):
clock_timestamp | 2020-06-28 15:29:54.564608+10 pg_sleep_until | clock_timestamp | 2020-06-28 15:30:00.0119+10
Saya menggunakan clock_timestamp()
dalam contoh ini, karena berubah selama eksekusi pernyataan. Hal ini memungkinkan kami untuk melihat nilai yang diperbarui seiring perkembangan pernyataan.
Saya menggunakan tampilan yang diperluas (kadang-kadang disebut sebagai "output vertikal") dalam contoh ini untuk memudahkan melihat hasilnya.
Anda dapat mengaktifkan tampilan yang diperluas di psql dengan menggunakan \x
.
Contoh 2
Berikut contoh lain, kali ini dengan panggilan tambahan ke pg_sleep_until()
dan clock_timestamp()
.
SELECT
clock_timestamp(),
pg_sleep_until('today 15:32'),
clock_timestamp(),
pg_sleep_until('today 15:33'),
clock_timestamp();
Hasil (menggunakan keluaran vertikal):
clock_timestamp | 2020-06-28 15:31:23.142358+10 pg_sleep_until | clock_timestamp | 2020-06-28 15:32:00.061566+10 pg_sleep_until | clock_timestamp | 2020-06-28 15:33:00.074381+10
Contoh 3
Dalam contoh ini, saya secara eksplisit menentukan offset tanggal/waktu dan zona waktu.
Juga, saya menjalankan kueri setelah stempel waktu pertama berlalu. Oleh karena itu segera dijalankan.
SELECT
clock_timestamp(),
pg_sleep_until('2020-06-29 08:54:00.000000+10'),
clock_timestamp(),
pg_sleep_until('2020-06-29 08:55:00.000000+10'),
clock_timestamp();
Hasil (menggunakan keluaran vertikal):
clock_timestamp | 2020-06-29 08:54:17.189189+10 pg_sleep_until | clock_timestamp | 2020-06-29 08:54:17.189196+10 pg_sleep_until | clock_timestamp | 2020-06-29 08:55:00.062783+10
Seperti yang ditunjukkan oleh hasilnya, saya tidak mulai menjalankan kueri hingga 17 detik setelah pg_sleep_until()
pertama nilai, sehingga ia langsung berjalan dan menggunakan stempel waktu pada saat dijalankan.
Stempel waktu saya semuanya berurutan dalam contoh ini, karena saya tidak ingin menunggu berjam-jam atau berhari-hari hanya untuk memperbarui artikel ini. Tetapi Anda dapat melanjutkan dan menentukan tanggal yang berbeda jika diperlukan.