
āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋ āĻŦā§āϝāĻžāĻāĻāĻĒ āύāϝāĻŧ. āĻ
āĻĨāĻŦāĻž āύāĻž? āĻāĻāύāĻžāĻā§āϰāĻŽā§ āĻŽā§āĻā§ āĻĢā§āϞāĻž āĻļāϰā§āĻāĻāĻžāĻāĻā§āϞāĻŋ āĻĨā§āĻā§ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰāϤ⧠āĻāĻŽāϰāĻž āĻā§āĻāĻžāĻŦā§ āĻŦāĻŋāϞāĻŽā§āĻŦāĻŋāϤ āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĻāĻŋ āϤāĻž āĻāĻāĻžāύā§āĨ¤
āĻāĻŋāĻāϞā§āϝāĻžāĻŦ āĻāĻžāĻā§āϰ āĻāύā§āϝ āĻĻāĻžāϝāĻŧā§ - āĻĒā§āϰāĻā§āϤāĻŋāϰ āĻŦā§āĻšāϤā§āϤāĻŽ āĻāĻŋāĻāϞā§āϝāĻžāĻŦ āĻāĻĻāĻžāĻšāϰāĻŖāĨ¤ 3 āĻŽāĻŋāϞāĻŋāϝāĻŧāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻāĻŦāĻ āĻĒā§āϰāĻžāϝāĻŧ 7 āĻŽāĻŋāϞāĻŋāϝāĻŧāύ āĻĒā§āϰāĻāϞā§āĻĒā§āϰ āϏāĻžāĻĨā§, āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻĄā§āĻĄāĻŋāĻā§āĻā§āĻĄ āĻāϰā§āĻāĻŋāĻā§āĻāĻāĻžāϰ āϏāĻš āĻŦā§āĻšāϤā§āϤāĻŽ āĻāĻĒā§āύ āϏā§āϰā§āϏ SaaS āϏāĻžāĻāĻāĻā§āϞāĻŋāϰ āĻŽāϧā§āϝ⧠āĻāĻāĻāĻŋāĨ¤ PostgreSQL āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏāĻŋāϏā§āĻā§āĻŽ āĻŦā§āϝāϤā§āϤ, GitLab.com āĻĒāϰāĻŋāĻāĻžāĻ āĻžāĻŽā§ āĻŦā§āĻļāĻŋāĻĻā§āϰ āϝāĻžāĻŦā§ āύāĻž āĻāĻŦāĻ āĻĄā§āĻāĻž āĻšāĻžāϰāĻŋāϝāĻŧā§ āĻā§āϞ⧠āĻā§āύ⧠āĻŦā§āϝāϰā§āĻĨāϤāĻžāϰ āĻā§āώā§āϤā§āϰ⧠āϤā§āϰā§āĻāĻŋ āϏāĻšāύāĻļā§āϞāϤāĻž āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰāϤ⧠āĻāĻŽāϰāĻž āĻā§ āĻāϰāĻāĻŋāĨ¤ āĻāĻāĻž āĻ āϏāĻŽā§āĻāĻžāĻŦā§āϝ āϝ⧠āĻāĻ āϧāϰāύā§āϰ āĻāĻāĻāĻŋ āĻŦāĻŋāĻĒāϰā§āϝāϝāĻŧ āĻāĻāĻŦā§, āĻāĻŋāύā§āϤ⧠āĻāĻŽāϰāĻž āĻāĻžāϞāĻāĻžāĻŦā§ āĻĒā§āϰāϏā§āϤā§āϤ āĻāĻŦāĻ āĻŦāĻŋāĻāĻŋāύā§āύ āĻŦā§āϝāĻžāĻāĻāĻĒ āĻāĻŦāĻ āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋ āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻžāϰ āϏāĻžāĻĨā§ āϏā§āĻāĻ āĻāĻĒāĨ¤
āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻŦā§āϝāĻžāĻ āĻāĻĒ āĻāϰāĻžāϰ āĻāĻāĻāĻŋ āĻāĻĒāĻžāϝāĻŧ āύāϝāĻŧ () āĻāĻŋāύā§āϤ⧠āĻāĻāύ āĻāĻŽāϰāĻž āĻĻā§āĻāĻŦ āĻāĻŋāĻāĻžāĻŦā§ āĻĻā§āϰā§āϤ āĻ āϞāϏ āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻĻā§āϰā§āĻāĻāύāĻžāĻā§āϰāĻŽā§ āĻŽā§āĻā§ āĻĢā§āϞāĻž āĻĄā§āĻāĻž āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰāĻž āϝāĻžāϝāĻŧ: āĻ āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻĒā§āϰāĻāϞā§āĻĒā§āϰ āĻāύā§āϝ āĻāĻŦāĻ āĻŽāĻžāϰā§āĻ āĻ āύā§āϰā§āϧ āĻāĻŦāĻ āĻāĻžāĻāĻā§āϞāĻŋāϰ āϏāĻžāĻĨā§ āϏāĻāϝā§āĻ āĻšāĻžāϰāĻŋāϝāĻŧā§āĻā§ā§ˇ
āĻāĻāĻāĻŋ āĻŦāĻŋāϞāĻŽā§āĻŦāĻŋāϤ āĻĒā§āϰāϤāĻŋāϰā§āĻĒ āĻĻāĻŋāϝāĻŧā§, āĻāĻŽāϰāĻž āĻŽāĻžāϤā§āϰ 1,5 āĻāύā§āĻāĻžāϰ āĻŽāϧā§āϝ⧠āĻĄā§āĻāĻž āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰā§āĻāĻŋāĨ¤ āĻĻā§āĻā§āύ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻāĻž āĻšāϝāĻŧā§āĻā§.
PostgreSQL-āĻāϰ āϏāĻžāĻšāĻžāϝā§āϝ⧠āĻĒāϝāĻŧā§āύā§āĻ āĻāύ āĻāĻžāĻāĻŽ āϰāĻŋāĻāĻāĻžāϰāĻŋ
PostgreSQL āĻāϰ āĻāĻāĻāĻŋ āĻ āύā§āϤāϰā§āύāĻŋāϰā§āĻŽāĻŋāϤ āĻĢāĻžāĻāĻļāύ āϰāϝāĻŧā§āĻā§ āϝāĻž āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϏāĻŽāϝāĻŧā§ āĻāĻāĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻ āĻŦāϏā§āĻĨāĻž āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰā§āĨ¤ āĻāĻāĻž āĻā§ āĻŦāϞ⧠(PITR) āĻāĻŦāĻ āĻāĻāĻ āĻĒāĻĻā§āϧāϤāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϝāĻž āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋāĻāĻŋāĻā§ āĻāĻĒ āĻā§ āĻĄā§āĻ āϰāĻžāĻā§: āϏāĻŽāĻā§āϰ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻā§āϞāĻžāϏā§āĻāĻžāϰā§āϰ āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻāϰāϝā§āĻā§āϝ āϏā§āύā§āϝāĻžāĻĒāĻļāĻ āĻĻāĻŋāϝāĻŧā§ āĻļā§āϰ⧠āĻāϰ⧠(āĻŦā§āϏ āĻŦā§āϝāĻžāĻāĻāĻĒ), āĻāĻŽāϰāĻž āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϏāĻŽāϝāĻŧ āĻĒāϰā§āϝāύā§āϤ āϰāĻžāώā§āĻā§āϰā§āϝāĻŧ āĻĒāϰāĻŋāĻŦāϰā§āϤāύā§āϰ āĻāĻāĻāĻŋ āϏāĻŋāϰāĻŋāĻ āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰāĻŋāĨ¤
āĻā§āϞā§āĻĄ āĻŦā§āϝāĻžāĻāĻāĻĒā§āϰ āĻāύā§āϝ āĻāĻ āĻŦā§āĻļāĻŋāώā§āĻā§āϝāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āĻāύā§āϝ, āĻāĻŽāϰāĻž āύāĻŋāϝāĻŧāĻŽāĻŋāϤ āĻāĻāĻāĻŋ āĻŽā§āϞāĻŋāĻ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻŦā§āϝāĻžāĻāĻāĻĒ āĻāϰāĻŋ āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻāĻāĻŋ āϏāĻāϰāĻā§āώāĻŖāĻžāĻāĻžāϰ⧠āϏāĻāϰāĻā§āώāĻŖ āĻāϰāĻŋ (GitLab āϏāĻāϰāĻā§āώāĻŖāĻžāĻāĻžāϰāĻā§āϞāĻŋ āϞāĻžāĻāĻ āĻāύ ) āĻāĻŽāϰāĻž āϞā§āĻāĻž-āĻāĻāĻžāĻŽā§ āϞāĻ (, āĻāϝāĻŧāĻžāϞ)āĨ¤ āĻāĻŦāĻ āĻāĻ āϏāĻŽāϏā§āϤ āĻāĻžāϝāĻŧāĻāĻžāϝāĻŧ, āĻāĻŽāϰāĻž āĻĻā§āϰā§āϝā§āĻ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ PITR āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋ: āĻŦā§āϝāϰā§āĻĨāϤāĻžāϰ āĻāĻā§ āύā§āĻāϝāĻŧāĻž āϏā§āύā§āϝāĻžāĻĒāĻļāĻ āĻĻāĻŋāϝāĻŧā§ āĻļā§āϰ⧠āĻāϰ⧠āĻāĻŦāĻ WAL āϏāĻāϰāĻā§āώāĻŖāĻžāĻāĻžāϰ āĻĨā§āĻā§ āĻŦā§āϝāϰā§āĻĨāϤāĻž āĻĒāϰā§āϝāύā§āϤ āĻĒāϰāĻŋāĻŦāϰā§āϤāύāĻā§āϞāĻŋ āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰāĻžāĨ¤
āĻŦāĻŋāϞāĻŽā§āĻŦāĻŋāϤ āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋ āĻāĻŋ?
āĻ
āϞāϏ āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋ āĻšāϞ āĻŦāĻŋāϞāĻŽā§āĻŦā§āϰ āϏāĻžāĻĨā§ WAL āĻĨā§āĻā§ āĻĒāϰāĻŋāĻŦāϰā§āϤāύā§āϰ āĻĒā§āϰāϝāĻŧā§āĻāĨ¤ āĻ
āϰā§āĻĨāĻžā§ āĻāĻ āĻāĻŖā§āĻāĻžāϝāĻŧ āϞā§āύāĻĻā§āύ āĻšāϝāĻŧā§āĻā§ X, āĻāĻŋāύā§āϤ⧠āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻŦāĻŋāϞāĻŽā§āĻŦ āϏāĻā§āĻā§ āĻĒā§āϰāϤāĻŋāϰā§āĻĒ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšāĻŦā§ d āĻāύā§āĻāĻž X + d.
PostgreSQL āĻāϰ āĻāĻāĻāĻŋ āĻĢāĻŋāĻāĻŋāĻā§āϝāĻžāϞ āĻĄāĻžāĻāĻžāĻŦā§āϏ āϰā§āĻĒā§āϞāĻŋāĻāĻž āϏā§āĻ āĻāĻĒ āĻāϰāĻžāϰ 2āĻāĻŋ āĻāĻĒāĻžāϝāĻŧ āϰāϝāĻŧā§āĻā§: āĻŦā§āϝāĻžāĻāĻāĻĒ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāĻŦāĻ āϏā§āĻā§āϰāĻŋāĻŽāĻŋāĻ āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋāĨ¤ , āĻŽā§āϞāϤ PITR āĻāϰ āĻŽāϤ āĻāĻžāĻ āĻāϰā§, āĻāĻŋāύā§āϤ⧠āĻā§āϰāĻŽāĻžāĻāϤ: āĻāĻŽāϰāĻž āĻā§āϰāĻŽāĻžāĻāϤ WAL āϏāĻāϰāĻā§āώāĻŖāĻžāĻāĻžāϰ āĻĨā§āĻā§ āĻĒāϰāĻŋāĻŦāϰā§āϤāύāĻā§āϞāĻŋ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰāĻŋ āĻāĻŦāĻ āϏā§āĻā§āϞāĻŋāĻā§ āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋāϤ⧠āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰāĻŋ⧎ āĻ āĻāĻĒāϏā§āĻā§āϰāĻŋāĻŽ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻšā§āϏā§āĻ āĻĨā§āĻā§ āϏāϰāĻžāϏāϰāĻŋ WAL āϏā§āĻā§āϰā§āĻŽ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰā§āĨ¤ āĻāĻŽāϰāĻž āϏāĻāϰāĻā§āώāĻŖāĻžāĻāĻžāϰ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻĒāĻāύā§āĻĻ āĻāϰāĻŋ - āĻāĻāĻŋ āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰāĻž āϏāĻšāĻ āĻāĻŦāĻ āĻāϤ⧠āϏā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻ āĻāϰā§āĻŽāĻā§āώāĻŽāϤāĻž āϰāϝāĻŧā§āĻā§ āϝāĻž āĻāϤā§āĻĒāĻžāĻĻāύ āĻā§āϞāĻžāϏā§āĻāĻžāϰā§āϰ āϏāĻžāĻĨā§ āϤāĻžāϞ āĻŽāĻŋāϞāĻŋāϝāĻŧā§ āĻāϞā§āĨ¤
āĻāĻāĻāĻŋ āϏāĻāϰāĻā§āώāĻŖāĻžāĻāĻžāϰ āĻĨā§āĻā§ āĻŦāĻŋāϞāĻŽā§āĻŦāĻŋāϤ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāĻŋāĻāĻžāĻŦā§ āϏā§āĻ āĻāĻĒ āĻāϰāĻŦā§āύ
āĻĢāĻžāĻāϞ⧠āĻŦāϰā§āĻŖāĻŋāϤ recovery.confāĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖ:
standby_mode = 'on'
restore_command = '/usr/bin/envdir /etc/wal-e.d/env /opt/wal-e/bin/wal-e wal-fetch -p 4 "%f" "%p"'
recovery_min_apply_delay = '8h'
recovery_target_timeline = 'latest'āĻāĻ āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋāĻā§āϞāĻŋāϰ āϏāĻžāĻĨā§, āĻāĻŽāϰāĻž āĻŦā§āϝāĻžāĻāĻāĻĒ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰā§āϰ āϏāĻžāĻĨā§ āĻāĻāĻāĻŋ āĻŦāĻŋāϞāĻŽā§āĻŦāĻŋāϤ āĻĒā§āϰāϤāĻŋāϰā§āĻĒ āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰā§āĻāĻŋāĨ¤ āĻāĻāĻžāύ⧠āĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧ WAL āĻ
āĻāĻļāĻā§āϞāĻŋ āĻŦā§āϰ āĻāϰāϤ⧠(restore_command) āϏāĻāϰāĻā§āώāĻŖāĻžāĻāĻžāϰ āĻĨā§āĻā§, āĻāĻŦāĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāύāĻā§āϞāĻŋ āĻāĻ āĻāύā§āĻāĻž āĻĒāϰ⧠āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰāĻž āĻšāĻŦā§ (recovery_min_apply_delay) āĻĒā§āϰāϤāĻŋāϰā§āĻĒāĻāĻŋ āϏāĻāϰāĻā§āώāĻŖāĻžāĻāĻžāϰ⧠āĻāĻžāĻāĻŽāϞāĻžāĻāύ āĻĒāϰāĻŋāĻŦāϰā§āϤāύā§āϰ āĻāύā§āϝ āĻĒāϰā§āϝāĻŦā§āĻā§āώāĻŖ āĻāϰāĻŦā§, āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ āĻāĻāĻāĻŋ āĻā§āϞāĻžāϏā§āĻāĻžāϰ āĻŦā§āϝāϰā§āĻĨāϤāĻžāϰ āĻāĻžāϰāĻŖā§ (recovery_target_timeline).
ĐĄ recovery_min_apply_delay āĻāĻĒāύāĻŋ āĻŦāĻŋāϞāĻŽā§āĻŦā§āϰ āϏāĻžāĻĨā§ āϏā§āĻā§āϰāĻŋāĻŽāĻŋāĻ āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋ āϏā§āĻ āĻāĻĒ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ, āϤāĻŦā§ āĻāĻāĻžāύ⧠āĻāϝāĻŧā§āĻāĻāĻŋ āϤā§āϰā§āĻāĻŋ āϰāϝāĻŧā§āĻā§ āϝāĻž āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋ āϏā§āϞāĻ, āĻšāĻ āϏā§āĻā§āϝāĻžāύā§āĻĄāĻŦāĻžāĻ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āĻāĻŦāĻ āĻāϰāĻ āĻ
āύā§āĻ āĻāĻŋāĻā§āϰ āϏāĻžāĻĨā§ āϏāĻŽā§āĻĒāϰā§āĻāĻŋāϤāĨ¤ WAL āϏāĻāϰāĻā§āώāĻŖāĻžāĻāĻžāϰ āĻāĻĒāύāĻžāĻā§ āϏā§āĻā§āϞāĻŋ āĻāĻĄāĻŧāĻžāϤ⧠āĻ
āύā§āĻŽāϤāĻŋ āĻĻā§āϝāĻŧ⧎
āϏā§āĻĨāĻŋāϤāĻŋāĻŽāĻžāĻĒ recovery_min_apply_delay āĻļā§āϧā§āĻŽāĻžāϤā§āϰ PostgreSQL 9.3 āĻ āĻāĻĒāϏā§āĻĨāĻŋāϤ āĻšāϝāĻŧā§āĻā§āĨ¤ āĻĒā§āϰā§āĻŦāĻŦāϰā§āϤ⧠āϏāĻāϏā§āĻāϰāĻŖāĻā§āϞāĻŋāϤā§, āĻŦāĻŋāϞāĻŽā§āĻŦāĻŋāϤ āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋāϰ āĻāύā§āϝ āĻāĻĒāύāĻžāĻā§ āϏāĻāĻŽāĻŋāĻļā§āϰāĻŖāĻāĻŋ āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāϤ⧠āĻšāĻŦā§ (pg_xlog_replay_pause(), pg_xlog_replay_resume()) āĻ
āĻĨāĻŦāĻž āĻŦāĻŋāϞāĻŽā§āĻŦā§āϰ āϏāĻŽāϝāĻŧāĻāĻžāϞā§āϰ āĻāύā§āϝ āϏāĻāϰāĻā§āώāĻŖāĻžāĻāĻžāϰ⧠WAL āĻŦāĻŋāĻāĻžāĻāĻā§āϞāĻŋ āϧāϰ⧠āϰāĻžāĻā§āύāĨ¤
PostgreSQL āĻāĻŋāĻāĻžāĻŦā§ āĻāĻāĻž āĻāϰā§?
āĻĒā§āϏā§āĻāĻā§āϰā§āĻāϏāĻāĻŋāĻāĻāϞ āĻā§āĻāĻžāĻŦā§ āĻ āϞāϏ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰ⧠āϤāĻž āĻĻā§āĻāϤ⧠āĻāĻāϰā§āώāĻŖā§āϝāĻŧāĨ¤ āĻāĻĻāĻŋāĻā§ āϤāĻžāĻāĻžāύ . āĻĨā§āĻā§ āĻŦāϞāĻž āĻšāϝāĻŧ WAL āĻĨā§āĻā§ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāύā§āĻā§āϰāĻŋāϰ āĻāύā§āϝāĨ¤
static bool
recoveryApplyDelay(XLogReaderState *record)
{
uint8 xact_info;
TimestampTz xtime;
long secs;
int microsecs;
/* nothing to do if no delay configured */
if (recovery_min_apply_delay <= 0)
return false;
/* no delay is applied on a database not yet consistent */
if (!reachedConsistency)
return false;
/*
* Is it a COMMIT record?
*
* We deliberately choose not to delay aborts since they have no effect on
* MVCC. We already allow replay of records that don't have a timestamp,
* so there is already opportunity for issues caused by early conflicts on
* standbys.
*/
if (XLogRecGetRmid(record) != RM_XACT_ID)
return false;
xact_info = XLogRecGetInfo(record) & XLOG_XACT_OPMASK;
if (xact_info != XLOG_XACT_COMMIT &&
xact_info != XLOG_XACT_COMMIT_PREPARED)
return false;
if (!getRecordTimestamp(record, &xtime))
return false;
recoveryDelayUntilTime =
TimestampTzPlusMilliseconds(xtime, recovery_min_apply_delay);
/*
* Exit without arming the latch if it's already past time to apply this
* record
*/
TimestampDifference(GetCurrentTimestamp(), recoveryDelayUntilTime,
&secs, µsecs);
if (secs <= 0 && microsecs <= 0)
return false;
while (true)
{
// Shortened:
// Use WaitLatch until we reached recoveryDelayUntilTime
// and then
break;
}
return true;
}āĻŽā§āϞ āĻāĻĨāĻž āĻšāϞ āϝ⧠āĻŦāĻŋāϞāĻŽā§āĻŦāĻāĻŋ āϞā§āύāĻĻā§āύ āĻāĻŽāĻŋāĻ āĻāĻžāĻāĻŽāϏā§āĻā§āϝāĻžāĻŽā§āĻĒā§ āύāĻĨāĻŋāĻā§āĻā§āϤ āĻļāĻžāϰā§āϰāĻŋāĻ āϏāĻŽāϝāĻŧā§āϰ āĻāĻĒāϰ āĻāĻŋāϤā§āϤāĻŋ āĻāϰ⧠(xtime) āĻāĻĒāύāĻŋ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻā§āĻā§āύ, āĻŦāĻŋāϞāĻŽā§āĻŦ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻŽāĻŋāĻā§āϰ āĻā§āώā§āϤā§āϰ⧠āĻĒā§āϰāϝā§āĻā§āϝ āĻāĻŦāĻ āĻ
āύā§āϝāĻžāύā§āϝ āĻāύā§āĻā§āϰāĻŋāĻā§ āĻĒā§āϰāĻāĻžāĻŦāĻŋāϤ āĻāϰ⧠āύāĻž - āϏāĻŽāϏā§āϤ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āϏāϰāĻžāϏāϰāĻŋ āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰāĻž āĻšāϝāĻŧ, āĻāĻŦāĻ āĻāĻŽāĻŋāĻ āĻŦāĻŋāϞāĻŽā§āĻŦāĻŋāϤ āĻšāϝāĻŧ, āϤāĻžāĻ āĻāĻŽāϰāĻž āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāĻž āĻŦāĻŋāϞāĻŽā§āĻŦā§āϰ āĻĒāϰā§āĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāύāĻā§āϞāĻŋ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦāĨ¤
āĻĄā§āĻāĻž āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰāϤ⧠āĻŦāĻŋāϞāĻŽā§āĻŦāĻŋāϤ āĻĒā§āϰāϤāĻŋāϰā§āĻĒ āĻā§āĻāĻžāĻŦā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§āύ
āϧāϰāĻž āϝāĻžāĻ āĻāĻŽāĻžāĻĻā§āϰ āĻāĻžāĻā§ āĻāĻāĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻā§āϞāĻžāϏā§āĻāĻžāϰ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻĒā§āϰāϤāĻŋāϰā§āĻĒ āϰāϝāĻŧā§āĻā§ āϝāĻžāϰ āĻā§āĻĒāĻžāĻĻāύ⧠āĻāĻ āĻāύā§āĻāĻž āĻŦāĻŋāϞāĻŽā§āĻŦ āϰāϝāĻŧā§āĻā§āĨ¤ āĻāϏā§āύ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāϰāĻŖ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻŋāĻāĻžāĻŦā§ āĻĄā§āĻāĻž āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰāĻž āϝāĻžāϝāĻŧ āϤāĻž āĻĻā§āĻāĻŋ .
āϝāĻāύ āĻāĻŽāϰāĻž āϏāĻŽāϏā§āϝāĻž āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻžāύāϤ⧠āĻĒā§āϰā§āĻāĻŋ, āĻāĻŽāϰāĻž āĻāĻāĻāĻŋ āĻŦāĻŋāϞāĻŽā§āĻŦāĻŋāϤ āĻĒā§āϰāϤāĻŋāϰā§āĻĒā§āϰ āĻāύā§āϝ:
SELECT pg_xlog_replay_pause();āĻāĻāĻāĻŋ āĻŦāĻŋāϰāϤāĻŋ āĻĻāĻŋāϝāĻŧā§, āĻāĻŽāĻžāĻĻā§āϰ āĻā§āύ āĻā§āĻāĻāĻŋ āĻāĻŋāϞ āύāĻž āϝ⧠āĻĒā§āϰāϤāĻŋāϰā§āĻĒ āĻ
āύā§āϰā§āϧāĻāĻŋ āĻĒā§āύāϰāĻžāĻŦā§āϤā§āϤāĻŋ āĻāϰāĻŦā§ DELETE. āĻāĻāĻāĻŋ āĻĻāϰāĻāĻžāϰ⧠āĻāĻŋāύāĻŋāϏ āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ āϏāĻŦāĻāĻŋāĻā§ āĻā§āĻāĻā§ āĻŦā§āϰ āĻāϰāĻžāϰ āĻāύā§āϝ āϏāĻŽāϝāĻŧ āĻĒā§āϰāϝāĻŧā§āĻāύ.
āĻŦāĻŋāύā§āĻĻā§ āĻšāϞ āϝ⧠āĻŦāĻŋāϞāĻŽā§āĻŦāĻŋāϤ āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋ āĻ
āύā§āϰā§āϧā§āϰ āĻāĻā§ āĻŽā§āĻšā§āϰā§āϤ⧠āĻĒā§āĻāĻāĻžāϤ⧠āĻšāĻŦā§ DELETE. āĻāĻŽāϰāĻž āĻāύā§āĻŽāĻžāύāĻŋāĻāĻāĻžāĻŦā§ āĻ
āĻĒāϏāĻžāϰāĻŖā§āϰ āĻļāĻžāϰā§āϰāĻŋāĻ āϏāĻŽāϝāĻŧ āĻāĻžāύāϤāĻžāĻŽāĨ¤ āĻāĻŽāϰāĻž āĻŽā§āĻā§ āĻĢā§āϞā§āĻāĻŋ recovery_min_apply_delay āĻāĻŦāĻ āϝā§āĻ āĻāϰā§āĻā§āύ recovery_target_time в recovery.conf. āĻāĻāĻāĻžāĻŦā§ āĻĒā§āϰāϤāĻŋāϰā§āĻĒāĻāĻŋ āĻĻā§āϰāĻŋ āύāĻž āĻāϰ⧠āϏāĻ āĻŋāĻ āĻŽā§āĻšā§āϰā§āϤ⧠āĻĒā§āĻāĻā§ āϝāĻžāϝāĻŧ:
recovery_target_time = '2018-10-12 09:25:00+00'āĻāĻžāĻāĻŽ āϏā§āĻā§āϝāĻžāĻŽā§āĻĒā§āϰ āϏāĻžāĻĨā§, āĻ
āϤāĻŋāϰāĻŋāĻā§āϤ āĻāĻŽāĻžāύ⧠āĻāĻžāϞ āϝāĻžāϤ⧠āĻŽāĻŋāϏ āύāĻž āĻšāϝāĻŧāĨ¤ āϏāϤā§āϝ, āĻŦā§āĻšāϤā§āϤāϰ āĻšā§āϰāĻžāϏ, āĻāĻŽāϰāĻž āĻāϰ⧠āϤāĻĨā§āϝ āĻšāĻžāϰāĻžāϤā§. āĻāĻŦāĻžāϰ, āϝāĻĻāĻŋ āĻāĻŽāϰāĻž āĻ
āύā§āϰā§āϧ āĻŽāĻŋāϏ DELETE, āϏāĻŦāĻāĻŋāĻā§ āĻāĻŦāĻžāϰ āĻŽā§āĻā§ āĻĢā§āϞāĻž āĻšāĻŦā§ āĻāĻŦāĻ āĻāĻĒāύāĻžāĻā§ āĻāĻŦāĻžāϰ āĻļā§āϰ⧠āĻāϰāϤ⧠āĻšāĻŦā§ (āĻŦāĻž āĻāĻŽāύāĻāĻŋ PITR-āĻāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻā§āϞā§āĻĄ āĻŦā§āϝāĻžāĻāĻāĻĒ āύāĻŋāϤ⧠āĻšāĻŦā§)āĨ¤
āĻāĻŽāϰāĻž āϏā§āĻĨāĻāĻŋāϤ āĻĒā§āϏā§āĻāĻā§āϰā§āϏ āĻĻā§āώā§āĻāĻžāύā§āϤ āĻĒā§āύāϰāĻžāϝāĻŧ āĻāĻžāϞ⧠āĻāϰā§āĻāĻŋ āĻāĻŦāĻ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϏāĻŽāϝāĻŧ āĻĒāϰā§āϝāύā§āϤ WAL āĻŦāĻŋāĻāĻžāĻāĻā§āϞāĻŋ āĻĒā§āύāϰāĻžāĻŦā§āϤā§āϤāĻŋ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§āĨ¤ āĻāĻĒāύāĻŋ āĻāĻŋāĻā§āĻāĻžāϏāĻž āĻāϰ⧠āĻāĻ āĻĒāϰā§āϝāĻžāϝāĻŧā§ āĻ āĻā§āϰāĻāϤāĻŋ āĻā§āϰā§āϝāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ:
SELECT
-- current location in WAL
pg_last_xlog_replay_location(),
-- current transaction timestamp (state of the replica)
pg_last_xact_replay_timestamp(),
-- current physical time
now(),
-- the amount of time still to be applied until recovery_target_time has been reached
'2018-10-12 09:25:00+00'::timestamptz - pg_last_xact_replay_timestamp() as delay;āĻāĻžāĻāĻŽāϏā§āĻā§āϝāĻžāĻŽā§āĻĒ āĻāϰ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āύāĻž āĻšāϞā§, āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻšāϝāĻŧāĨ¤ āĻāϰā§āĻŽ āĻāĻžāϏā§āĻāĻŽāĻžāĻāĻ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰ⧠āĻĒā§āύāĻāĻĒā§āϰāĻā§āώā§āĻāĻžāϰ āĻĒāϰ⧠āĻĻā§āώā§āĻāĻžāύā§āϤāĻāĻŋ āĻŦāύā§āϧ āĻāϰāϤā§, āĻĒā§āϰāĻāĻžāϰ āĻāϰāϤ⧠āĻŦāĻž āĻŦāĻŋāϰāĻžāĻŽ āĻĻāĻŋāϤ⧠(āĻāĻāĻŋ āĻĄāĻŋāĻĢāϞā§āĻāϰā§āĻĒā§ āϏā§āĻĨāĻāĻŋāϤ āĻĨāĻžāĻā§)āĨ¤
āϏā§āĻ āĻĻā§āϰā§āĻāĻžāĻā§āϝāĻāύāĻ āĻ āύā§āϰā§āϧā§āϰ āĻāĻā§āĻ āĻĄāĻžāĻāĻžāĻŦā§āϏāĻāĻŋ āϤāĻžāϰ āĻ āĻŦāϏā§āĻĨāĻžāϝāĻŧ āĻĢāĻŋāϰ⧠āĻāϏā§āĻā§āĨ¤ āĻāĻāύ āĻāĻĒāύāĻŋ, āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āĻĄā§āĻāĻž āϰāĻĒā§āϤāĻžāύāĻŋ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāĻŽāϰāĻž āĻŽā§āĻā§ āĻĢā§āϞāĻž āϞā§āĻŦā§āϞ āĻĄā§āĻāĻž āĻāĻŦāĻ āϏāĻŽāϏā§āϝāĻžāĻā§āϞāĻŋāϰ āϏāĻŽāϏā§āϤ āϞāĻŋāĻā§āĻ āĻāĻŦāĻ āĻŽāĻžāϰā§āĻ āĻ āύā§āϰā§āϧāĻā§āϞāĻŋ āϰāĻĒā§āϤāĻžāύāĻŋ āĻāϰā§āĻāĻŋ āĻāĻŦāĻ āϏā§āĻā§āϞāĻŋāĻā§ āĻĒā§āϰā§āĻĄāĻžāĻāĻļāύ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āϏā§āĻĨāĻžāύāĻžāύā§āϤāϰāĻŋāϤ āĻāϰā§āĻāĻŋ⧎ āϝāĻĻāĻŋ āĻā§āώāϤāĻŋāĻā§āϞāĻŋ āĻŦāĻĄāĻŧ āĻāĻāĻžāϰā§āϰ āĻšāϝāĻŧ, āĻāĻĒāύāĻŋ āĻā§āĻŦāϞ āĻĒā§āϰāϤāĻŋāϰā§āĻĒāĻāĻŋāĻā§ āĻĒā§āϰāĻāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ āĻāĻŦāĻ āĻāĻāĻŋāĻā§ āĻĒā§āϰāϧāĻžāύ āĻšāĻŋāϏāĻžāĻŦā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāĻŋāύā§āϤ⧠āϤāĻžāϰāĻĒāϰ⧠āĻāĻŽāϰāĻž āϝ⧠āĻŦāĻŋāύā§āĻĻā§āϤ⧠āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰā§āĻāĻŋ āϤāĻžāϰ āĻĒāϰ⧠āϏāĻŽāϏā§āϤ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻšāĻžāϰāĻŋāϝāĻŧā§ āϝāĻžāĻŦā§āĨ¤
āĻāĻžāĻāĻŽāϏā§āĻā§āϝāĻžāĻŽā§āĻĒā§āϰ āĻĒāϰāĻŋāĻŦāϰā§āϤā§, āϞā§āύāĻĻā§āύ āĻāĻāĻĄāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻāĻžāϞāĨ¤ āĻāĻ āĻāĻāĻĄāĻŋāĻā§āϞāĻŋ āϰā§āĻāϰā§āĻĄ āĻāϰāĻž āĻĻāϰāĻāĻžāϰā§, āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āĻĄāĻŋāĻĄāĻŋāĻāϞ āϏā§āĻā§āĻāĻŽā§āύā§āĻā§āϰ āĻāύā§āϝ (āϝā§āĻŽāύ DROP TABLE), āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠log_statements = 'ddl'. āϞā§āύāĻĻā§āύ āĻāĻāĻĄāĻŋ āĻĨāĻžāĻāϞ⧠āĻāĻŽāϰāĻž āύāĻŋāϤāĻžāĻŽ recovery_target_xid āĻāĻŦāĻ āĻ
āύā§āϰā§āϧā§āϰ āĻāĻā§ āϏāĻŦāĻāĻŋāĻā§ āϞā§āύāĻĻā§āύā§āϰ āĻāύā§āϝ āύāĻŋāĻā§ āĻāϞ⧠āĻā§āĻā§ DELETE.
āĻāĻžāĻā§ āĻĢāĻŋāϰ⧠āĻāϏāĻž āĻā§āĻŦāĻ āϏāĻšāĻ: āĻĨā§āĻā§ āϏāĻŽāϏā§āϤ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻŽā§āĻā§ āĻĢā§āϞā§āύ recovery.conf āĻāĻŦāĻ Postgres āĻĒā§āύāϰāĻžāϝāĻŧ āĻāĻžāϞ⧠āĻāϰā§āύāĨ¤ āĻĒā§āϰāϤāĻŋāϰā§āĻĒāĻāĻŋ āĻļā§āĻā§āϰāĻ āĻāĻŦāĻžāϰ āĻāĻ āĻāύā§āĻāĻž āĻŦāĻŋāϞāĻŽā§āĻŦāĻŋāϤ āĻšāĻŦā§, āĻāĻŦāĻ āĻāĻŽāϰāĻž āĻāĻŦāĻŋāώā§āϝāϤā§āϰ āϏāĻŽāϏā§āϝāĻžāϰ āĻāύā§āϝ āĻĒā§āϰāϏā§āϤā§āϤāĨ¤
āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰā§āϰ āϏā§āĻŦāĻŋāϧāĻž
āĻā§āϞā§āĻĄ āĻŦā§āϝāĻžāĻāĻāĻĒā§āϰ āĻĒāϰāĻŋāĻŦāϰā§āϤ⧠āĻāĻāĻāĻŋ āĻŦāĻŋāϞāĻŽā§āĻŦāĻŋāϤ āĻĒā§āϰāϤāĻŋāϰā§āĻĒ āϏāĻš, āĻāĻĒāύāĻžāĻā§ āϏāĻāϰāĻā§āώāĻŖāĻžāĻāĻžāϰ āĻĨā§āĻā§ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻāĻŋāϤā§āϰ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰāϤ⧠āĻāύā§āĻāĻž āĻŦā§āϝāϝāĻŧ āĻāϰāϤ⧠āĻšāĻŦā§ āύāĻžāĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻŽā§āϞāĻŋāĻ 2 āĻāĻŋāĻŦāĻŋ āĻŦā§āϝāĻžāĻāĻāĻĒ āĻĒā§āϤ⧠āĻāĻŽāĻžāĻĻā§āϰ āĻĒāĻžāĻāĻ āĻāύā§āĻāĻž āϏāĻŽāϝāĻŧ āϞāĻžāĻā§āĨ¤ āĻāĻŦāĻ āϤāĻžāϰāĻĒāϰā§āĻ āĻāĻĒāύāĻžāĻā§ āĻāĻžāĻā§āĻā§āώāĻŋāϤ āĻ āĻŦāϏā§āĻĨāĻžāϝāĻŧ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰāϤ⧠(āϏāĻŦāĻā§āϝāĻŧā§ āĻāĻžāϰāĻžāĻĒ āĻā§āώā§āϤā§āϰā§) āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻĻā§āύāĻŋāĻ WAL āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤
āĻāĻāĻāĻŋ āĻŦāĻŋāϞāĻŽā§āĻŦāĻŋāϤ āĻĒā§āϰāϤāĻŋāϰā§āĻĒ āĻĻā§āĻāĻŋ āĻāĻĒāĻžāϝāĻŧā§ āĻāĻāĻāĻŋ āĻ āĻžāύā§āĻĄāĻž āĻŦā§āϝāĻžāĻāĻāĻĒā§āϰ āĻā§āϝāĻŧā§ āĻāĻžāϞ:
- āϏāĻāϰāĻā§āώāĻŖāĻžāĻāĻžāϰ āĻĨā§āĻā§ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻŽā§āϞāĻŋāĻ āĻŦā§āϝāĻžāĻāĻāĻĒ āĻ āĻĒāϏāĻžāϰāĻŖ āĻāϰāĻžāϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āύā§āĻāĨ¤
- WAL āϏā§āĻāĻŽā§āύā§āĻāĻā§āϞāĻŋāϰ āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāĻ-āĻāύā§āĻāĻž āĻāĻāύā§āĻĄā§ āϰāϝāĻŧā§āĻā§ āϝāĻž āĻĒā§āύāϰāĻžāĻŦā§āϤā§āϤāĻŋ āĻāϰāĻž āĻāĻŦāĻļā§āϝāĻāĨ¤
WAL āĻĨā§āĻā§ āĻĒāĻŋāĻāĻāĻāĻŋāĻāϰ āϤā§āϰāĻŋ āĻāϰāĻž āϏāĻŽā§āĻāĻŦ āĻāĻŋāύāĻž āϤāĻžāĻ āĻāĻŽāϰāĻž āĻā§āϰāĻŽāĻžāĻāϤ āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻŋ āĻāĻŦāĻ āϏā§āĻĨāĻāĻŋāϤ āĻĒā§āϰāϤāĻŋāϰā§āĻĒā§āϰ āĻŦā§āϝāĻŦāϧāĻžāύ āĻĒāϰā§āϝāĻŦā§āĻā§āώāĻŖ āĻāϰ⧠āĻāĻŽāϰāĻž āĻĻā§āϰā§āϤ WAL āϏāĻāϰāĻā§āώāĻŖāĻžāĻāĻžāϰ⧠āĻĻā§āϰā§āύā§āϤāĻŋ āĻŦāĻž āĻ āύā§āϝāĻžāύā§āϝ āϏāĻŽāϏā§āϝāĻž āϞāĻā§āώā§āϝ āĻāϰāĻŦāĨ¤
āĻāĻ āĻāĻĻāĻžāĻšāϰāĻŖā§, āĻāĻāĻŋ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰāϤ⧠āĻāĻŽāĻžāĻĻā§āϰ 50 āĻŽāĻŋāύāĻŋāĻ āϏāĻŽāϝāĻŧ āϞā§āĻā§āĻā§, āϝāĻžāϰ āĻŽāĻžāύ⧠āĻāϤāĻŋ āĻāĻŋāϞ āĻĒā§āϰāϤāĻŋ āĻāύā§āĻāĻžāϝāĻŧ 110 GB WAL āĻĄā§āĻāĻž (āĻāϰā§āĻāĻžāĻāĻāĻāĻŋ āĻāĻāύāĻ āĻāĻžāϞ⧠āĻāĻŋāϞ ) āĻŽā§āĻ, āĻāĻŽāϰāĻž āϏāĻŽāϏā§āϝāĻžāĻāĻŋ āϏāĻŽāĻžāϧāĻžāύ āĻāϰā§āĻāĻŋ āĻāĻŦāĻ 1,5 āĻāύā§āĻāĻžāϰ āĻŽāϧā§āϝ⧠āĻĄā§āĻāĻž āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰā§āĻāĻŋāĨ¤
āĻĢāϞāĻžāĻĢāϞ: āϝā§āĻāĻžāύ⧠āĻāĻāĻāĻŋ āĻŦāĻŋāϞāĻŽā§āĻŦāĻŋāϤ āĻĒā§āϰāϤāĻŋāϰā§āĻĒ āĻĻāϰāĻāĻžāϰ⧠(āĻāĻŦāĻ āϝā§āĻāĻžāύ⧠āĻāĻāĻŋ āύāϝāĻŧ)
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻā§āϞāĻŦāĻļāϤ āĻĄā§āĻāĻž āĻšāĻžāϰāĻŋāϝāĻŧā§ āĻĢā§āϞā§āύ āĻāĻŦāĻ āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāĻž āĻŦāĻŋāϞāĻŽā§āĻŦā§āϰ āĻŽāϧā§āϝ⧠āĻāĻ āϏāĻŽāϏā§āϝāĻžāĻāĻŋ āϞāĻā§āώā§āϝ āĻāϰā§āύ āϤāĻŦā§ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ āĻāĻŋāĻāĻŋā§āϏāĻž āĻšāĻŋāϏāĻžāĻŦā§ āĻŦāĻŋāϞāĻŽā§āĻŦāĻŋāϤ āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤
āĻāĻŋāύā§āϤ⧠āĻŽāύ⧠āϰāĻžāĻāĻŦā§āύ: āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋ āĻŦā§āϝāĻžāĻāĻāĻĒ āύāϝāĻŧāĨ¤
āĻŦā§āϝāĻžāĻāĻāĻĒ āĻāĻŦāĻ āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋ āĻŦāĻŋāĻāĻŋāύā§āύ āĻāĻĻā§āĻĻā§āĻļā§āϝ āĻāĻā§. āĻāĻĒāύāĻŋ āĻā§āϞāĻŦāĻļāϤ āϤā§āϰāĻŋ āĻāϰāϞ⧠āĻāĻāĻāĻŋ āĻ āĻžāύā§āĻĄāĻž āĻŦā§āϝāĻžāĻāĻāĻĒ āĻāĻžāĻā§ āĻāϏāĻŦā§ DELETE āĻŦāĻž DROP TABLE. āĻāĻŽāϰāĻž āĻā§āϞā§āĻĄ āϏā§āĻā§āϰā§āĻ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻŦā§āϝāĻžāĻāĻāĻĒ āϤā§āϰāĻŋ āĻāϰāĻŋ āĻāĻŦāĻ āĻā§āĻŦāĻŋāϞā§āϰ āĻĒā§āϰā§āĻŦāĻŦāϰā§āϤ⧠āĻ
āĻŦāϏā§āĻĨāĻž āĻŦāĻž āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰāĻŋāĨ¤ āĻāĻŋāύā§āϤ⧠āĻāĻāĻ āϏāĻā§āĻā§ āĻ
āύā§āϰā§āϧ DROP TABLE āĻāĻžāϰā§āϝāĻāĻžāϰ⧠āĻā§āϞāĻžāϏā§āĻāĻžāϰ⧠āϏāĻŽāϏā§āϤ āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋāϤ⧠āĻĒā§āϰāĻžāϝāĻŧ āϤāĻžāϤā§āĻā§āώāĻŖāĻŋāĻāĻāĻžāĻŦā§ āĻĒā§āύāϰā§āϤā§āĻĒāĻžāĻĻāύ āĻāϰāĻž āĻšāϝāĻŧ, āϤāĻžāĻ āϏāĻžāϧāĻžāϰāĻŖ āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋ āĻāĻāĻžāύ⧠āϏāĻžāĻšāĻžāϝā§āϝ āĻāϰāĻŦā§ āύāĻžāĨ¤ āϝāĻāύ āĻĒā§āĻĨāĻ āϏāĻžāϰā§āĻāĻžāϰ āĻāĻžāĻĄāĻŧāĻž āĻāϰāĻž āĻšāϝāĻŧ āĻāĻŦāĻ āϞā§āĻĄ āĻŦāĻŋāϤāϰāĻŖ āĻāϰāĻž āĻšāϝāĻŧ āϤāĻāύ āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋ āύāĻŋāĻā§āĻ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāĻĒāϞāĻŦā§āϧ āϰāĻžāĻā§āĨ¤
āĻāĻŽāύāĻāĻŋ āĻāĻāĻāĻŋ āĻŦāĻŋāϞāĻŽā§āĻŦāĻŋāϤ āĻĒā§āϰāϤāĻŋāϰā§āĻĒā§āϰ āϏāĻžāĻĨā§āĻ, āĻĄā§āĻāĻž āϏā§āύā§āĻāĻžāϰā§āϰ āĻŦā§āϝāϰā§āĻĨāϤāĻž, āϞā§āĻāĻžāύ⧠āĻā§āώāϤāĻŋ, āĻŦāĻž āĻ āĻŦāĻŋāϞāĻŽā§āĻŦā§ āϞāĻā§āώāĻŖā§āϝāĻŧ āύāϝāĻŧ āĻāĻŽāύ āĻāĻāύāĻž āĻāĻāϞ⧠āĻāĻŽāĻžāĻĻā§āϰ āĻŽāĻžāĻā§ āĻŽāĻžāĻā§ āĻāĻāĻāĻŋ āύāĻŋāϰāĻžāĻĒāĻĻ āϏā§āĻĨāĻžāύ⧠āĻāĻāĻāĻŋ āĻ āĻžāύā§āĻĄāĻž āĻŦā§āϝāĻžāĻāĻāĻĒā§āϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āĻšāϝāĻŧāĨ¤ āĻāĻāĻž āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋ āĻāĻāĻžāύ⧠āĻā§āύ āĻāĻžāĻā§ āĻāϏ⧠āύāĻž.
āĻŽāύā§āϤāĻŦā§āϝāĨ¤ āĻāĻĒāϰ āĻāĻŽāϰāĻž āĻŦāϰā§āϤāĻŽāĻžāύ⧠āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āϏāĻŋāϏā§āĻā§āĻŽ āϏā§āϤāϰ⧠āĻĄā§āĻāĻž āĻā§āώāϤāĻŋāϰ āĻŦāĻŋāϰā§āĻĻā§āϧ⧠āϰāĻā§āώāĻž āĻāϰāĻŋ āĻāĻŦāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āϏā§āϤāϰ⧠āĻĄā§āĻāĻž āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰāĻŋ āύāĻžāĨ¤
āĻāϤā§āϏ: www.habr.com
