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

Como o pg_sleep() funciona no PostgreSQL


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