O PostgreSQL inclui três funções que permitem atrasar a execução do processo do servidor. a execução de uma declaração.
Em outras palavras, você pode executar uma instrução e fazer uma pausa na metade, antes de continuar seu caminho alegre.
As três funções são:
pg_sleep()
pg_sleep_for()
pg_sleep_until()
Todos eles são muito semelhantes, mas funcionam de maneiras ligeiramente diferentes.
Abaixo estão exemplos de cada um.
Exemplo – pg_sleep()
O
pg_sleep()
A função faz o processo da sessão atual dormir até que um número especificado de segundos tenha passado. Você especifica os segundos como um argumento. O argumento é um valor de precisão dupla , para que você possa fornecer segundos fracionários, se necessário.
\x
SELECT
clock_timestamp(),
pg_sleep(1),
clock_timestamp(),
pg_sleep(1),
clock_timestamp();
Resultado (usando saída vertical):
clock_timestamp | 2020-06-28 16:18:25.645814+10 pg_sleep | clock_timestamp | 2020-06-28 16:18:26.706998+10 pg_sleep | clock_timestamp | 2020-06-28 16:18:27.768604+10
Exemplo – pg_sleep_for()
O
pg_sleep_for()
A função é uma função de conveniência para tempos de suspensão maiores especificados como um intervalo. SELECT
clock_timestamp(),
pg_sleep_for('2 minutes 10 seconds'),
clock_timestamp(),
pg_sleep_for('1 minute 5 seconds'),
clock_timestamp();
Resultado (usando saída vertical):
clock_timestamp | 2020-06-28 16:20:04.218295+10 pg_sleep_for | clock_timestamp | 2020-06-28 16:22:14.222907+10 pg_sleep_for | clock_timestamp | 2020-06-28 16:23:19.294483+10
Exemplo – pg_sleep_until()
O
pg_sleep_until()
é uma função de conveniência função de conveniência para quando um horário específico de despertar é desejado. SELECT
clock_timestamp(),
pg_sleep_until('today 16:25:15.1234'),
clock_timestamp();
Resultado (usando saída vertical):
clock_timestamp | 2020-06-28 16:24:28.900319+10 pg_sleep_until | clock_timestamp | 2020-06-28 16:25:15.184042+10
Precisão do atraso
Ao usar essas funções, o atraso de tempo real pode variar do tempo especificado dependendo do nível de atividade do servidor. No entanto, o atraso do sono será pelo menos tão longo quanto especificado.
Em particular,
pg_sleep_until
não é garantido que acorde exatamente na hora especificada, mas não acordará mais cedo.