Trong PostgreSQL, bạn có thể sử dụng pg_sleep_until()
chức năng trì hoãn việc thực thi cho đến một dấu thời gian được chỉ định.
Điều này hữu ích khi bạn muốn có một thời gian thức dậy cụ thể.
Lưu ý rằng pg_sleep_until
không được đảm bảo sẽ thức dậy chính xác vào thời gian được chỉ định, nhưng nó sẽ không thức dậy sớm hơn.
Cú pháp
Cú pháp như sau:
pg_sleep_until(timestamp with time zone)
Ví dụ
Dưới đây là một ví dụ để chứng minh cách sử dụng của nó.
\x
SELECT
clock_timestamp(),
pg_sleep_until('today 15:30'),
clock_timestamp();
Kết quả (sử dụng đầu ra dọc):
clock_timestamp | 2020-06-28 15:29:54.564608+10 pg_sleep_until | clock_timestamp | 2020-06-28 15:30:00.0119+10
Tôi đã sử dụng clock_timestamp()
trong ví dụ này, vì nó thay đổi trong quá trình thực thi câu lệnh. Điều này cho phép chúng tôi xem các giá trị được cập nhật khi câu lệnh tiến triển.
Tôi đã sử dụng màn hình mở rộng (đôi khi được gọi là "đầu ra theo chiều dọc") trong ví dụ này để giúp bạn dễ dàng xem kết quả hơn.
Bạn có thể chuyển đổi hiển thị mở rộng trong psql bằng cách sử dụng \x
.
Ví dụ 2
Đây là một ví dụ khác, lần này với một lệnh gọi bổ sung tới pg_sleep_until()
và clock_timestamp()
.
SELECT
clock_timestamp(),
pg_sleep_until('today 15:32'),
clock_timestamp(),
pg_sleep_until('today 15:33'),
clock_timestamp();
Kết quả (sử dụng đầu ra dọc):
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
Ví dụ 3
Trong ví dụ này, tôi chỉ định rõ ràng độ lệch ngày / giờ và múi giờ.
Ngoài ra, tôi chạy truy vấn sau khi dấu thời gian đầu tiên đã trôi qua. Do đó nó chạy ngay lập tức.
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();
Kết quả (sử dụng đầu ra dọc):
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
Như kết quả cho thấy, tôi đã không bắt đầu chạy truy vấn cho đến 17 giây sau pg_sleep_until()
đầu tiên giá trị và do đó nó chạy ngay lập tức và sử dụng dấu thời gian tại thời điểm nó chạy.
Các dấu thời gian của tôi đều liên tiếp nhanh chóng trong các ví dụ này, bởi vì tôi không muốn đợi hàng giờ hoặc hàng ngày chỉ để cập nhật bài viết này. Nhưng bạn có thể tiếp tục và chỉ định một ngày khác nếu được yêu cầu.