PostgreSQL obsahuje tři funkce, které vám umožní zpozdit provedení serverového procesu. provedení výpisu.
Jinými slovy, můžete spustit příkaz a nechat jej v polovině pozastavit, než budete pokračovat ve své veselé cestě.
Tyto tři funkce jsou:
pg_sleep()
pg_sleep_for()
pg_sleep_until()
Všechny jsou velmi podobné, ale fungují trochu odlišnými způsoby.
Níže jsou uvedeny příklady každého z nich.
Příklad – pg_sleep()
pg_sleep()
funkce uspí proces aktuální relace, dokud neuplyne zadaný počet sekund.
Jako argument zadáte sekundy. Argument je hodnota dvojité přesnosti , takže v případě potřeby můžete zadat zlomky sekund.
\x
SELECT
clock_timestamp(),
pg_sleep(1),
clock_timestamp(),
pg_sleep(1),
clock_timestamp();
Výsledek (při použití vertikálního výstupu):
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
Příklad – pg_sleep_for()
pg_sleep_for()
funkce je pohodlná funkce pro delší doby spánku specifikované jako interval.
SELECT
clock_timestamp(),
pg_sleep_for('2 minutes 10 seconds'),
clock_timestamp(),
pg_sleep_for('1 minute 5 seconds'),
clock_timestamp();
Výsledek (při použití vertikálního výstupu):
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
Příklad – pg_sleep_until()
pg_sleep_until()
funkce je komfortní funkce pro případ, že je požadována konkrétní doba buzení.
SELECT
clock_timestamp(),
pg_sleep_until('today 16:25:15.1234'),
clock_timestamp();
Výsledek (při použití vertikálního výstupu):
clock_timestamp | 2020-06-28 16:24:28.900319+10 pg_sleep_until | clock_timestamp | 2020-06-28 16:25:15.184042+10
Přesnost zpoždění
Při použití těchto funkcí se skutečné časové zpoždění může lišit od zadaného času v závislosti na úrovni aktivity serveru. Zpoždění spánku však bude alespoň tak dlouhé, jak je uvedeno.
Konkrétně pg_sleep_until
není zaručeno, že se probudí přesně v určený čas, ale neprobudí se dříve.