PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como pausar a execução de uma instrução no PostgreSQL


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.