PostgreSQL āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻĻā§āĻ°ā§āĻ¯ā§‹āĻ— āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻ°āĻž āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ…āĻ˛āĻ¸ āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ›āĻŋ

PostgreSQL āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻĻā§āĻ°ā§āĻ¯ā§‹āĻ— āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻ°āĻž āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ…āĻ˛āĻ¸ āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ›āĻŋ
āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ āĻŦā§āĻ¯āĻžāĻ•āĻ†āĻĒ āĻ¨āĻ¯āĻŧ. āĻ…āĻĨāĻŦāĻž āĻ¨āĻž? āĻ˜āĻŸāĻ¨āĻžāĻ•ā§āĻ°āĻŽā§‡ āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻž āĻļāĻ°ā§āĻŸāĻ•āĻžāĻŸāĻ—ā§āĻ˛āĻŋ āĻĨā§‡āĻ•ā§‡ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻ†āĻŽāĻ°āĻž āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻŦāĻŋāĻ˛āĻŽā§āĻŦāĻŋāĻ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ›āĻŋ āĻ¤āĻž āĻāĻ–āĻžāĻ¨ā§‡āĨ¤

āĻ…āĻŦāĻ•āĻžāĻ āĻžāĻŽā§‹ āĻŦāĻŋāĻļā§‡āĻˇāĻœā§āĻž āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦ āĻ•āĻžāĻœā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĻāĻžāĻ¯āĻŧā§€ GitLab.com - āĻĒā§āĻ°āĻ•ā§ƒāĻ¤āĻŋāĻ° āĻŦā§ƒāĻšāĻ¤ā§āĻ¤āĻŽ āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĨ¤ 3 āĻŽāĻŋāĻ˛āĻŋāĻ¯āĻŧāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻžāĻ¯āĻŧ 7 āĻŽāĻŋāĻ˛āĻŋāĻ¯āĻŧāĻ¨ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻ¸āĻžāĻĨā§‡, āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĄā§‡āĻĄāĻŋāĻ•ā§‡āĻŸā§‡āĻĄ āĻ†āĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āĻšāĻžāĻ° āĻ¸āĻš āĻŦā§ƒāĻšāĻ¤ā§āĻ¤āĻŽ āĻ“āĻĒā§‡āĻ¨ āĻ¸ā§‹āĻ°ā§āĻ¸ SaaS āĻ¸āĻžāĻ‡āĻŸāĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋāĨ¤ PostgreSQL āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻŦā§āĻ¯āĻ¤ā§€āĻ¤, GitLab.com āĻĒāĻ°āĻŋāĻ•āĻžāĻ āĻžāĻŽā§‹ āĻŦā§‡āĻļāĻŋāĻĻā§‚āĻ° āĻ¯āĻžāĻŦā§‡ āĻ¨āĻž āĻāĻŦāĻ‚ āĻĄā§‡āĻŸāĻž āĻšāĻžāĻ°āĻŋāĻ¯āĻŧā§‡ āĻ—ā§‡āĻ˛ā§‡ āĻ•ā§‹āĻ¨ā§‹ āĻŦā§āĻ¯āĻ°ā§āĻĨāĻ¤āĻžāĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ¸āĻšāĻ¨āĻļā§€āĻ˛āĻ¤āĻž āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻ†āĻŽāĻ°āĻž āĻ•ā§€ āĻ•āĻ°āĻ›āĻŋāĨ¤ āĻāĻŸāĻž āĻ…āĻ¸āĻŽā§āĻ­āĻžāĻŦā§āĻ¯ āĻ¯ā§‡ āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻĒāĻ°ā§āĻ¯āĻ¯āĻŧ āĻ˜āĻŸāĻŦā§‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻŽāĻ°āĻž āĻ­āĻžāĻ˛āĻ­āĻžāĻŦā§‡ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻāĻŦāĻ‚ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻŦā§āĻ¯āĻžāĻ•āĻ†āĻĒ āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸ā§āĻŸāĻ• āĻ†āĻĒāĨ¤

āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻŦā§āĻ¯āĻžāĻ• āĻ†āĻĒ āĻ•āĻ°āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻ¨āĻ¯āĻŧ (āĻ¨āĻŋāĻšā§‡ āĻĻā§‡āĻ–) āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ–āĻ¨ āĻ†āĻŽāĻ°āĻž āĻĻā§‡āĻ–āĻŦ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻĻā§āĻ°ā§āĻ¤ āĻ…āĻ˛āĻ¸ āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻĻā§āĻ°ā§āĻ˜āĻŸāĻ¨āĻžāĻ•ā§āĻ°āĻŽā§‡ āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻž āĻĄā§‡āĻŸāĻž āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻ•āĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ: āĻ…āĻ¨ GitLab.com āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻļāĻ°ā§āĻŸāĻ•āĻžāĻŸ āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻœāĻ¨ā§āĻ¯ gitlab-ce āĻāĻŦāĻ‚ āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻāĻŦāĻ‚ āĻ•āĻžāĻœāĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻšāĻžāĻ°āĻŋāĻ¯āĻŧā§‡āĻ›ā§‡ā§ˇ

āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ˛āĻŽā§āĻŦāĻŋāĻ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻ°ā§‚āĻĒ āĻĻāĻŋāĻ¯āĻŧā§‡, āĻ†āĻŽāĻ°āĻž āĻŽāĻžāĻ¤ā§āĻ° 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 āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻāĻŸāĻž āĻ•āĻ°ā§‡?

āĻĒā§‹āĻ¸ā§āĻŸāĻ—ā§āĻ°ā§‡āĻāĻ¸āĻ•āĻŋāĻ‰āĻāĻ˛ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ…āĻ˛āĻ¸ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°ā§‡ āĻ¤āĻž āĻĻā§‡āĻ–āĻ¤ā§‡ āĻ†āĻ•āĻ°ā§āĻˇāĻŖā§€āĻ¯āĻŧāĨ¤ āĻāĻĻāĻŋāĻ•ā§‡ āĻ¤āĻžāĻ•āĻžāĻ¨ recoveryApplyDelay(XlogReaderState). āĻĨā§‡āĻ•ā§‡ āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧ āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§ƒāĻ¤ā§āĻ¤āĻŋ āĻ˛ā§āĻĒ 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, &microsecs);
    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;

āĻŸāĻžāĻ‡āĻŽāĻ¸ā§āĻŸā§āĻ¯āĻžāĻŽā§āĻĒ āĻ†āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ¨āĻž āĻšāĻ˛ā§‡, āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻšāĻ¯āĻŧāĨ¤ āĻ•āĻ°ā§āĻŽ āĻ•āĻžāĻ¸ā§āĻŸāĻŽāĻžāĻ‡āĻœ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ recovery_target_actionāĻĒā§āĻ¨āĻƒāĻĒā§āĻ°āĻšā§‡āĻˇā§āĻŸāĻžāĻ° āĻĒāĻ°ā§‡ āĻĻā§ƒāĻˇā§āĻŸāĻžāĻ¨ā§āĻ¤āĻŸāĻŋ āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°āĻ¤ā§‡, āĻĒā§āĻ°āĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻŦāĻž āĻŦāĻŋāĻ°āĻžāĻŽ āĻĻāĻŋāĻ¤ā§‡ (āĻāĻŸāĻŋ āĻĄāĻŋāĻĢāĻ˛ā§āĻŸāĻ°ā§‚āĻĒā§‡ āĻ¸ā§āĻĨāĻ—āĻŋāĻ¤ āĻĨāĻžāĻ•ā§‡)āĨ¤

āĻ¸ā§‡āĻ‡ āĻĻā§āĻ°ā§āĻ­āĻžāĻ—ā§āĻ¯āĻœāĻ¨āĻ• āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻ†āĻ—ā§‡āĻ‡ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸āĻŸāĻŋ āĻ¤āĻžāĻ° āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¯āĻŧ āĻĢāĻŋāĻ°ā§‡ āĻāĻ¸ā§‡āĻ›ā§‡āĨ¤ āĻāĻ–āĻ¨ āĻ†āĻĒāĻ¨āĻŋ, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻĄā§‡āĻŸāĻž āĻ°āĻĒā§āĻ¤āĻžāĻ¨āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻ†āĻŽāĻ°āĻž āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻž āĻ˛ā§‡āĻŦā§‡āĻ˛ āĻĄā§‡āĻŸāĻž āĻāĻŦāĻ‚ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ˛āĻŋāĻ™ā§āĻ• āĻāĻŦāĻ‚ āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§āĻ—ā§āĻ˛āĻŋ āĻ°āĻĒā§āĻ¤āĻžāĻ¨āĻŋ āĻ•āĻ°ā§‡āĻ›āĻŋ āĻāĻŦāĻ‚ āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻĒā§āĻ°ā§‹āĻĄāĻžāĻ•āĻļāĻ¨ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ āĻ•āĻ°ā§‡āĻ›āĻŋā§ˇ āĻ¯āĻĻāĻŋ āĻ•ā§āĻˇāĻ¤āĻŋāĻ—ā§āĻ˛āĻŋ āĻŦāĻĄāĻŧ āĻ†āĻ•āĻžāĻ°ā§‡āĻ° āĻšāĻ¯āĻŧ, āĻ†āĻĒāĻ¨āĻŋ āĻ•ā§‡āĻŦāĻ˛ āĻĒā§āĻ°āĻ¤āĻŋāĻ°ā§‚āĻĒāĻŸāĻŋāĻ•ā§‡ āĻĒā§āĻ°āĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻāĻŦāĻ‚ āĻāĻŸāĻŋāĻ•ā§‡ āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ āĻ†āĻŽāĻ°āĻž āĻ¯ā§‡ āĻŦāĻŋāĻ¨ā§āĻĻā§āĻ¤ā§‡ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻ•āĻ°ā§‡āĻ›āĻŋ āĻ¤āĻžāĻ° āĻĒāĻ°ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻšāĻžāĻ°āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻŦā§‡āĨ¤

āĻŸāĻžāĻ‡āĻŽāĻ¸ā§āĻŸā§āĻ¯āĻžāĻŽā§āĻĒā§‡āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡, āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ†āĻ‡āĻĄāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ­āĻžāĻ˛āĨ¤ āĻāĻ‡ āĻ†āĻ‡āĻĄāĻŋāĻ—ā§āĻ˛āĻŋ āĻ°ā§‡āĻ•āĻ°ā§āĻĄ āĻ•āĻ°āĻž āĻĻāĻ°āĻ•āĻžāĻ°ā§€, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻĄāĻŋāĻĄāĻŋāĻāĻ˛ āĻ¸ā§āĻŸā§‡āĻŸāĻŽā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ (āĻ¯ā§‡āĻŽāĻ¨ DROP TABLE), āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ log_statements = 'ddl'. āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ†āĻ‡āĻĄāĻŋ āĻĨāĻžāĻ•āĻ˛ā§‡ āĻ†āĻŽāĻ°āĻž āĻ¨āĻŋāĻ¤āĻžāĻŽ recovery_target_xid āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻ†āĻ—ā§‡ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻšā§‡ āĻšāĻ˛ā§‡ āĻ—ā§‡āĻ›ā§‡ DELETE.

āĻ•āĻžāĻœā§‡ āĻĢāĻŋāĻ°ā§‡ āĻ†āĻ¸āĻž āĻ–ā§āĻŦāĻ‡ āĻ¸āĻšāĻœ: āĻĨā§‡āĻ•ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛ā§āĻ¨ recovery.conf āĻāĻŦāĻ‚ Postgres āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻšāĻžāĻ˛ā§ āĻ•āĻ°ā§āĻ¨āĨ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻ°ā§‚āĻĒāĻŸāĻŋ āĻļā§€āĻ˜ā§āĻ°āĻ‡ āĻ†āĻŦāĻžāĻ° āĻ†āĻŸ āĻ˜āĻ¨ā§āĻŸāĻž āĻŦāĻŋāĻ˛āĻŽā§āĻŦāĻŋāĻ¤ āĻšāĻŦā§‡, āĻāĻŦāĻ‚ āĻ†āĻŽāĻ°āĻž āĻ­āĻŦāĻŋāĻˇā§āĻ¯āĻ¤ā§‡āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤āĨ¤

āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ°ā§‡āĻ° āĻ¸ā§āĻŦāĻŋāĻ§āĻž

āĻ•ā§‹āĻ˛ā§āĻĄ āĻŦā§āĻ¯āĻžāĻ•āĻ†āĻĒā§‡āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ˛āĻŽā§āĻŦāĻŋāĻ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻ°ā§‚āĻĒ āĻ¸āĻš, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖāĻžāĻ—āĻžāĻ° āĻĨā§‡āĻ•ā§‡ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻšāĻŋāĻ¤ā§āĻ° āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻ˜āĻ¨ā§āĻŸāĻž āĻŦā§āĻ¯āĻ¯āĻŧ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¨āĻžāĨ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻŽā§ŒāĻ˛āĻŋāĻ• 2 āĻŸāĻŋāĻŦāĻŋ āĻŦā§āĻ¯āĻžāĻ•āĻ†āĻĒ āĻĒā§‡āĻ¤ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒāĻžāĻāĻš āĻ˜āĻ¨ā§āĻŸāĻž āĻ¸āĻŽāĻ¯āĻŧ āĻ˛āĻžāĻ—ā§‡āĨ¤ āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡āĻ“ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ•āĻžāĻ™ā§āĻ•ā§āĻˇāĻŋāĻ¤ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¯āĻŧ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ (āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ–āĻžāĻ°āĻžāĻĒ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡) āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻĻā§ˆāĻ¨āĻŋāĻ• WAL āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤

āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ˛āĻŽā§āĻŦāĻŋāĻ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻ°ā§‚āĻĒ āĻĻā§āĻŸāĻŋ āĻ‰āĻĒāĻžāĻ¯āĻŧā§‡ āĻāĻ•āĻŸāĻŋ āĻ āĻžāĻ¨ā§āĻĄāĻž āĻŦā§āĻ¯āĻžāĻ•āĻ†āĻĒā§‡āĻ° āĻšā§‡āĻ¯āĻŧā§‡ āĻ­āĻžāĻ˛:

  1. āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖāĻžāĻ—āĻžāĻ° āĻĨā§‡āĻ•ā§‡ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻŽā§ŒāĻ˛āĻŋāĻ• āĻŦā§āĻ¯āĻžāĻ•āĻ†āĻĒ āĻ…āĻĒāĻ¸āĻžāĻ°āĻŖ āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¨ā§‡āĻ‡āĨ¤
  2. WAL āĻ¸ā§‡āĻ—āĻŽā§‡āĻ¨ā§āĻŸāĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ†āĻŸ-āĻ˜āĻ¨ā§āĻŸāĻž āĻ‰āĻ‡āĻ¨ā§āĻĄā§‹ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻž āĻĒā§āĻ¨āĻ°āĻžāĻŦā§ƒāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°āĻž āĻ†āĻŦāĻļā§āĻ¯āĻ•āĨ¤

WAL āĻĨā§‡āĻ•ā§‡ āĻĒāĻŋāĻ†āĻ‡āĻŸāĻŋāĻ†āĻ° āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻ¸āĻŽā§āĻ­āĻŦ āĻ•āĻŋāĻ¨āĻž āĻ¤āĻžāĻ“ āĻ†āĻŽāĻ°āĻž āĻ•ā§āĻ°āĻŽāĻžāĻ—āĻ¤ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻ—āĻŋāĻ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻ°ā§‚āĻĒā§‡āĻ° āĻŦā§āĻ¯āĻŦāĻ§āĻžāĻ¨ āĻĒāĻ°ā§āĻ¯āĻŦā§‡āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§‡ āĻ†āĻŽāĻ°āĻž āĻĻā§āĻ°ā§āĻ¤ WAL āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖāĻžāĻ—āĻžāĻ°ā§‡ āĻĻā§āĻ°ā§āĻ¨ā§€āĻ¤āĻŋ āĻŦāĻž āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻ•āĻ°āĻŦāĨ¤

āĻāĻ‡ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡, āĻāĻŸāĻŋ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° 50 āĻŽāĻŋāĻ¨āĻŋāĻŸ āĻ¸āĻŽāĻ¯āĻŧ āĻ˛ā§‡āĻ—ā§‡āĻ›ā§‡, āĻ¯āĻžāĻ° āĻŽāĻžāĻ¨ā§‡ āĻ—āĻ¤āĻŋ āĻ›āĻŋāĻ˛ āĻĒā§āĻ°āĻ¤āĻŋ āĻ˜āĻ¨ā§āĻŸāĻžāĻ¯āĻŧ 110 GB WAL āĻĄā§‡āĻŸāĻž (āĻ†āĻ°ā§āĻ•āĻžāĻ‡āĻ­āĻŸāĻŋ āĻāĻ–āĻ¨āĻ“ āĻšāĻžāĻ˛ā§ āĻ›āĻŋāĻ˛ āĻāĻĄāĻžāĻŦā§āĻ˛ā§āĻāĻ¸ āĻāĻ¸ 3) āĻŽā§‹āĻŸ, āĻ†āĻŽāĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻŸāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°ā§‡āĻ›āĻŋ āĻāĻŦāĻ‚ 1,5 āĻ˜āĻ¨ā§āĻŸāĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻĄā§‡āĻŸāĻž āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤

āĻĢāĻ˛āĻžāĻĢāĻ˛: āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ˛āĻŽā§āĻŦāĻŋāĻ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻ°ā§‚āĻĒ āĻĻāĻ°āĻ•āĻžāĻ°ā§€ (āĻāĻŦāĻ‚ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻāĻŸāĻŋ āĻ¨āĻ¯āĻŧ)

āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ­ā§āĻ˛āĻŦāĻļāĻ¤ āĻĄā§‡āĻŸāĻž āĻšāĻžāĻ°āĻŋāĻ¯āĻŧā§‡ āĻĢā§‡āĻ˛ā§‡āĻ¨ āĻāĻŦāĻ‚ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻž āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ‡ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻŸāĻŋ āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻ•āĻ°ā§‡āĻ¨ āĻ¤āĻŦā§‡ āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ• āĻšāĻŋāĻ•āĻŋā§ŽāĻ¸āĻž āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻŦāĻŋāĻ˛āĻŽā§āĻŦāĻŋāĻ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§āĻ¨āĨ¤

āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻŽāĻ¨ā§‡ āĻ°āĻžāĻ–āĻŦā§‡āĻ¨: āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ āĻŦā§āĻ¯āĻžāĻ•āĻ†āĻĒ āĻ¨āĻ¯āĻŧāĨ¤

āĻŦā§āĻ¯āĻžāĻ•āĻ†āĻĒ āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ‰āĻĻā§āĻĻā§‡āĻļā§āĻ¯ āĻ†āĻ›ā§‡. āĻ†āĻĒāĻ¨āĻŋ āĻ­ā§āĻ˛āĻŦāĻļāĻ¤ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ˛ā§‡ āĻāĻ•āĻŸāĻŋ āĻ āĻžāĻ¨ā§āĻĄāĻž āĻŦā§āĻ¯āĻžāĻ•āĻ†āĻĒ āĻ•āĻžāĻœā§‡ āĻ†āĻ¸āĻŦā§‡ DELETE āĻŦāĻž DROP TABLE. āĻ†āĻŽāĻ°āĻž āĻ•ā§‹āĻ˛ā§āĻĄ āĻ¸ā§āĻŸā§‹āĻ°ā§‡āĻœ āĻĨā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦā§āĻ¯āĻžāĻ•āĻ†āĻĒ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻŸā§‡āĻŦāĻŋāĻ˛ā§‡āĻ° āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§€ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻŦāĻž āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻ•āĻ°āĻŋāĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ•āĻ‡ āĻ¸āĻ™ā§āĻ—ā§‡ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ DROP TABLE āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻžāĻ°ā§€ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋāĻ¤ā§‡ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ¤āĻžāĻ¤ā§āĻ•ā§āĻˇāĻŖāĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻĒā§āĻ¨āĻ°ā§āĻ¤ā§āĻĒāĻžāĻĻāĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻ‡ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ āĻāĻ–āĻžāĻ¨ā§‡ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°āĻŦā§‡ āĻ¨āĻžāĨ¤ āĻ¯āĻ–āĻ¨ āĻĒā§ƒāĻĨāĻ• āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ­āĻžāĻĄāĻŧāĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻ˛ā§‹āĻĄ āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ¤āĻ–āĻ¨ āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ āĻ¨āĻŋāĻœā§‡āĻ‡ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻ°āĻžāĻ–ā§‡āĨ¤

āĻāĻŽāĻ¨āĻ•āĻŋ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ˛āĻŽā§āĻŦāĻŋāĻ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻ°ā§‚āĻĒā§‡āĻ° āĻ¸āĻžāĻĨā§‡āĻ“, āĻĄā§‡āĻŸāĻž āĻ¸ā§‡āĻ¨ā§āĻŸāĻžāĻ°ā§‡āĻ° āĻŦā§āĻ¯āĻ°ā§āĻĨāĻ¤āĻž, āĻ˛ā§āĻ•āĻžāĻ¨ā§‹ āĻ•ā§āĻˇāĻ¤āĻŋ, āĻŦāĻž āĻ…āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§‡ āĻ˛āĻ•ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻ¨āĻ¯āĻŧ āĻāĻŽāĻ¨ āĻ˜āĻŸāĻ¨āĻž āĻ˜āĻŸāĻ˛ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŽāĻžāĻā§‡ āĻŽāĻžāĻā§‡ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°āĻžāĻĒāĻĻ āĻ¸ā§āĻĨāĻžāĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻ āĻžāĻ¨ā§āĻĄāĻž āĻŦā§āĻ¯āĻžāĻ•āĻ†āĻĒā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻ¯āĻŧāĨ¤ āĻāĻ•āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ āĻāĻ–āĻžāĻ¨ā§‡ āĻ•ā§‹āĻ¨ āĻ•āĻžāĻœā§‡ āĻ†āĻ¸ā§‡ āĻ¨āĻž.

āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯āĨ¤ āĻ‰āĻĒāĻ° GitLab.com āĻ†āĻŽāĻ°āĻž āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ā§‡ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ¸ā§āĻ¤āĻ°ā§‡ āĻĄā§‡āĻŸāĻž āĻ•ā§āĻˇāĻ¤āĻŋāĻ° āĻŦāĻŋāĻ°ā§āĻĻā§āĻ§ā§‡ āĻ°āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻ¸ā§āĻ¤āĻ°ā§‡ āĻĄā§‡āĻŸāĻž āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻ•āĻ°āĻŋ āĻ¨āĻžāĨ¤

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨