No PostgreSQL, você pode usar o
pg_sleep()
função para atrasar a execução por um determinado número de segundos. Faz o processo da sessão atual dormir até que o número especificado de segundos tenha decorrido. Funciona de forma semelhante ao
sleep()
do MySQL função, e também waitfor
do TSQL instrução no SQL Server. O
pg_sleep()
função aceita uma precisão dupla argumento, então você também pode especificar atrasos fracionários de segundo. O atraso do sono será pelo menos desde que especificado. No entanto, pode demorar mais dependendo de fatores como a carga do servidor, bem como a resolução efetiva da sua plataforma do intervalo de suspensão.
Sintaxe
A sintaxe é bem simples:
pg_sleep(seconds)
Onde
seconds
é uma precisão dupla valor que especifica quantos segundos/segundos fracionários devem passar antes que o processo continue. Exemplo
Aqui está um exemplo para demonstrar seu uso.
\x
SELECT
clock_timestamp(),
pg_sleep(1),
clock_timestamp(),
pg_sleep(1),
clock_timestamp();
Resultado (usando saída vertical):
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
Eu usei
clock_timestamp()
neste exemplo, porque muda durante a execução da instrução. Isso nos permite ver os valores atualizados à medida que a instrução avança. Usei a exibição expandida (às vezes chamada de “saída vertical”) neste exemplo para facilitar a visualização do resultado.
Você pode alternar a exibição expandida no psql usando
\x
. Frações de Segundos
Conforme mencionado, você pode especificar atrasos fracionários de segundo, se necessário.
SELECT
clock_timestamp(),
pg_sleep(.5),
clock_timestamp(),
pg_sleep(.5),
clock_timestamp();
Resultado (usando saída vertical):
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
Valores negativos
Valores negativos resultarão em nenhum atraso na execução.
SELECT
clock_timestamp(),
pg_sleep(-1),
clock_timestamp(),
pg_sleep(-1),
clock_timestamp();
Resultado (usando saída vertical):
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