Trong PostgreSQL, bạn có thể sử dụng pg_sleep()
chức năng trì hoãn việc thực thi trong một số giây nhất định.
Nó làm cho quy trình của phiên hiện tại ở chế độ ngủ cho đến khi số giây được chỉ định trôi qua. Nó hoạt động tương tự như sleep()
của MySQL và cả waitfor
của TSQL trong SQL Server.
pg_sleep()
hàm chấp nhận độ chính xác kép đối số, vì vậy bạn cũng có thể chỉ định độ trễ theo phân số-giây.
Thời gian trễ ngủ sẽ ít nhất là miễn là được chỉ định. Tuy nhiên, thời gian có thể lâu hơn tùy thuộc vào các yếu tố như tải máy chủ, cũng như cách giải quyết khoảng thời gian nghỉ hiệu quả của nền tảng của bạn.
Cú pháp
Cú pháp khá đơn giản:
pg_sleep(seconds)
Trong đó seconds
là độ chính xác kép giá trị chỉ định số giây / giây phân đoạn phải trôi qua trước khi quá trình tiếp tục.
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(1),
clock_timestamp(),
pg_sleep(1),
clock_timestamp();
Kết quả (sử dụng đầu ra dọc):
clock_timestamp | 2020-06-28 13:46:53.808072+10 pg_sleep | clock_timestamp | 2020-06-28 13:46:54.870423+10 pg_sleep | clock_timestamp | 2020-06-28 13:46:55.938278+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
.
Giây phân số
Như đã đề cập, bạn có thể chỉ định độ trễ theo phần giây nếu được yêu cầu.
SELECT
clock_timestamp(),
pg_sleep(.5),
clock_timestamp(),
pg_sleep(.5),
clock_timestamp();
Kết quả (sử dụng đầu ra dọc):
clock_timestamp | 2020-06-28 15:03:52.496211+10 pg_sleep | clock_timestamp | 2020-06-28 15:03:53.041063+10 pg_sleep | clock_timestamp | 2020-06-28 15:03:53.553291+10
Giá trị phủ định
Giá trị âm sẽ không làm chậm quá trình thực thi.
SELECT
clock_timestamp(),
pg_sleep(-1),
clock_timestamp(),
pg_sleep(-1),
clock_timestamp();
Kết quả (sử dụng đầu ra dọc):
clock_timestamp | 2020-06-29 09:03:19.056681+10 pg_sleep | clock_timestamp | 2020-06-29 09:03:19.056682+10 pg_sleep | clock_timestamp | 2020-06-29 09:03:19.056683+10