เจ…เจธเฉ€เจ‚ PostgreSQL เจจเจพเจฒ เจกเจฟเจœเจผเจพเจธเจŸเจฐ เจฐเจฟเจ•เจตเจฐเฉ€ เจฒเจˆ เจ†เจฒเจธเฉ€ เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉ€เจคเฉ€

เจ…เจธเฉ€เจ‚ PostgreSQL เจจเจพเจฒ เจกเจฟเจœเจผเจพเจธเจŸเจฐ เจฐเจฟเจ•เจตเจฐเฉ€ เจฒเจˆ เจ†เจฒเจธเฉ€ เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉ€เจคเฉ€
เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€ เจฌเฉˆเจ•เจ…เฉฑเจช เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจœเจพเจ‚ เจจเจนเฉ€เจ‚? เจ—เจฒเจคเฉ€ เจจเจพเจฒ เจฎเจฟเจŸเจพเจ‰เจฃ เจตเจพเจฒเฉ‡ เจธเจผเจพเจฐเจŸเจ•เฉฑเจŸเจพเจ‚ เจคเฉ‹เจ‚ เจฎเฉเฉœ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจฎเฉเจฒเจคเจตเฉ€ เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉ€เจคเฉ€ เจนเฉˆเฅค

เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจขเจพเจ‚เจšเฉ‡ เจฆเฉ‡ เจฎเจพเจนเจฐ GitLab เจ•เฉฐเจฎ เจฒเจˆ เจœเจผเจฟเฉฐเจฎเฉ‡เจตเจพเจฐ เจนเฉˆ GitLab.com - เจ•เฉเจฆเจฐเจค เจตเจฟเฉฑเจš เจธเจญ เจคเฉ‹เจ‚ เจตเฉฑเจกเฉ€ เจ—เจฟเฉฑเจŸเจฒเฉˆเจฌ เจ‰เจฆเจพเจนเจฐเจฃเฅค 3 เจฎเจฟเจฒเฉ€เจ…เจจ เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจ…เจคเฉ‡ เจฒเจ—เจญเจ— 7 เจฎเจฟเจฒเฉ€เจ…เจจ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ, เจ‡เจน เจ‡เฉฑเจ• เจธเจฎเจฐเจชเจฟเจค เจ†เจฐเจ•เฉ€เจŸเฉˆเจ•เจšเจฐ เจตเจพเจฒเฉ€ เจธเจญ เจคเฉ‹เจ‚ เจตเฉฑเจกเฉ€ เจ“เจชเจจ เจธเฉ‹เจฐเจธ SaaS เจธเจพเจˆเจŸเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจนเฉˆเฅค PostgreSQL เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจธเจฟเจธเจŸเจฎ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚, GitLab.com เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจขเจพเจ‚เจšเจพ เจฌเจนเฉเจค เจฆเฉ‚เจฐ เจจเจนเฉ€เจ‚ เจœเจพเจตเฉ‡เจ—เจพ, เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจ…เจธเจซเจฒเจคเจพ เจฆเฉ€ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจจเฉเจ•เจธ เจธเจนเจฟเจฃเจธเจผเฉ€เจฒเจคเจพ เจจเฉ‚เฉฐ เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ•เฉ€ เจ•เจฐ เจฐเจนเฉ‡ เจนเจพเจ‚ เจœเจฆเฉ‹เจ‚ เจกเฉ‡เจŸเจพ เจ—เฉเฉฐเจฎ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจ‡เจน เจธเฉฐเจญเจพเจตเจจเจพ เจจเจนเฉ€เจ‚ เจนเฉˆ เจ•เจฟ เจ…เจœเจฟเจนเฉ€ เจคเจฌเจพเจนเฉ€ เจนเฉ‹เจตเฉ‡เจ—เฉ€, เจชเจฐ เจ…เจธเฉ€เจ‚ เจšเฉฐเจ—เฉ€ เจคเจฐเฉเจนเจพเจ‚ เจคเจฟเจ†เจฐ เจนเจพเจ‚ เจ…เจคเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจฌเฉˆเจ•เจ…เฉฑเจช เจ…เจคเฉ‡ เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€ เจตเจฟเจงเฉ€เจ†เจ‚ เจจเจพเจฒ เจธเจŸเจพเจ•เจ…เฉฑเจช เจนเจพเจ‚เฅค

เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฆเจพ เจฌเฉˆเจ•เจ…เฉฑเจช เจฒเฉˆเจฃ เจฆเจพ เจธเจพเจงเจจ เจจเจนเฉ€เจ‚ เจนเฉˆ (เจจเฉ€เจšเฉ‡ เจฆเฉ‡เจ–เฉ‹). เจชเจฐ เจนเฉเจฃ เจ…เจธเฉ€เจ‚ เจฆเฉ‡เจ–เจพเจ‚เจ—เฉ‡ เจ•เจฟ เจ†เจฒเจธเฉ€ เจฐเฉ€เจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ…เจšเจพเจจเจ• เจกเจฟเจฒเฉ€เจŸ เจ•เฉ€เจคเฉ‡ เจ—เจ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ เจ•เจฟเจตเฉ‡เจ‚ เจฎเฉเฉœ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจเจพ เจนเฉˆ: เจšเจพเจฒเฉ‚ GitLab.com เจฏเฉ‚เจœเจผเจฐ เจธเจผเจพเจฐเจŸเจ•เฉฑเจŸ เจจเฉ‚เฉฐ เจฎเจฟเจŸเจพเจ‡เจ† เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฒเจˆ gitlab-ce เจ…เจคเฉ‡ เจตเจฟเจฒเฉ€เจจ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจ…เจคเฉ‡ เจ•เจพเจฐเจœเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจ•เจจเฉˆเจ•เจธเจผเจจ เจ–เจคเจฎ เจนเฉ‹ เจ—เจ เจนเจจเฅค

เจ‡เฉฑเจ• เจฎเฉเจฒเจคเจตเฉ€ เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€ เจฆเฉ‡ เจจเจพเจฒ, เจ…เจธเฉ€เจ‚ เจธเจฟเจฐเจซเจผ 1,5 เจ˜เฉฐเจŸเจฟเจ†เจ‚ เจตเจฟเฉฑเจš เจกเจพเจŸเจพ เจฎเฉเฉœ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเจพเฅค เจฆเฉ‡เจ–เฉ‹ เจ‡เจน เจ•เจฟเจตเฉ‡เจ‚ เจนเฉ‹เจ‡เจ†เฅค

PostgreSQL เจจเจพเจฒ เจธเจฎเฉ‡เจ‚ เจฆเฉ€ เจฐเจฟเจ•เจตเจฐเฉ€ เจตเจฟเฉฑเจš เจชเฉเจ†เจ‡เฉฐเจŸ

PostgreSQL เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฌเจฟเจฒเจŸ-เจ‡เจจ เจซเฉฐเจ•เจธเจผเจจ เจนเฉˆ เจœเฉ‹ เจ‡เฉฑเจ• เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฆเฉ€ เจธเจฅเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจธเจฎเฉ‡เจ‚ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ–เจพเจธ เจฌเจฟเฉฐเจฆเฉ‚ เจคเฉฑเจ• เจฌเจนเจพเจฒ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจจเฉ‚เฉฐ เจ•เจฟเจนเจพ เจ—เจฟเจ† เจนเฉˆ เจชเฉเจ†เจ‡เฉฐเจŸ-เจ‡เจจ-เจŸเจพเจˆเจฎ เจฐเจฟเจ•เจตเจฐเฉ€ (PITR) เจ…เจคเฉ‡ เจ‰เจนเฉ€ เจตเจฟเจงเฉ€เจ†เจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจจ เจœเฉ‹ เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจ…เจช เจŸเฉ‚ เจกเฉ‡เจŸ เจฐเฉฑเจ–เจฆเฉ‡ เจนเจจ: เจชเฉ‚เจฐเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจ•เจฒเฉฑเจธเจŸเจฐ (เจฌเฉ‡เจธ เจฌเฉˆเจ•เจ…เจช) เจฆเฉ‡ เจ‡เฉฑเจ• เจญเจฐเฉ‹เจธเฉ‡เจฏเฉ‹เจ— เจธเจจเฉˆเจชเจธเจผเจพเจŸ เจจเจพเจฒ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ, เจ…เจธเฉ€เจ‚ เจธเจฎเฉ‡เจ‚ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจจเจฟเจธเจผเจšเจฟเจค เจฌเจฟเฉฐเจฆเฉ‚ เจคเฉฑเจ• เจฐเจพเจœ เจฆเฉ€เจ†เจ‚ เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจฒเฉœเฉ€ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค

เจ•เฉ‹เจฒเจก เจฌเฉˆเจ•เจ…เฉฑเจช เจฒเจˆ เจ‡เจธ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจจเจฟเจฏเจฎเจฟเจค เจคเฉŒเจฐ 'เจคเฉ‡ เจ‡เฉฑเจ• เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจกเจพเจŸเจพเจฌเฉ‡เจธ เจฌเฉˆเจ•เจ…เฉฑเจช เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจชเฉเจฐเจพเจฒเฉ‡เจ– เจตเจฟเฉฑเจš เจธเจŸเฉ‹เจฐ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ (GitLab เจชเฉเจฐเจพเจฒเฉ‡เจ–เจพเจ‚ เจตเจฟเฉฑเจš เจฐเจนเจฟเฉฐเจฆเฉ‡ เจนเจจ เจ—เฉ‚เจ—เจฒ เจ•เจฒเจพเจ‰เจก เจธเจŸเฉ‹เจฐเฉ‡เจœ). เจ…เจธเฉ€เจ‚ เจฒเจฟเจ–เจฃ-เจ…เฉฑเจ—เฉ‡ เจฒเฉŒเจ— (เจฒเจฟเจ–เจฃ-เจ…เฉฑเจ—เฉ‡ เจฆเจพ เจฒเจพเจ—, WAL). เจ…เจคเฉ‡ เจ‡เจธ เจธเจญ เจฆเฉ‡ เจจเจพเจฒ, เจ…เจธเฉ€เจ‚ เจคเจฌเจพเจนเฉ€ เจฐเจฟเจ•เจตเจฐเฉ€ เจฒเจˆ เจ‡เฉฑเจ• 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-e 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 เจ‡เจน เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆ?

เจ‡เจน เจฆเฉ‡เจ–เจฃเจพ เจฆเจฟเจฒเจšเจธเจช เจนเฉˆ เจ•เจฟ 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เจฆเฉเจฌเจพเจฐเจพ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจ‰เจฆเจพเจนเจฐเจจ เจจเฉ‚เฉฐ เจฌเฉฐเจฆ เจ•เจฐเจจ, เจชเฉเจฐเจšเจพเจฐ เจ•เจฐเจจ เจœเจพเจ‚ เจฐเฉ‹เจ•เจฃ เจฒเจˆ (เจ‡เจน เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจฎเฉเจ…เฉฑเจคเจฒ เจนเฉˆ)เฅค

เจ‰เจธ เจฎเฉฐเจฆเจญเจพเจ—เฉ€ เจฌเฉ‡เจจเจคเฉ€ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจ†เจชเจฃเฉ€ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจตเจพเจชเจธ เจ† เจ—เจฟเจ†เฅค เจนเฉเจฃ เจคเฉเจธเฉ€เจ‚, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจกเจพเจŸเจพ เจจเจฟเจฐเจฏเจพเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจ…เจธเฉ€เจ‚ เจฎเจฟเจŸเจพเจ เจ—เจ เจฒเฉ‡เจฌเจฒ เจกเฉ‡เจŸเจพ เจ…เจคเฉ‡ เจฎเฉเฉฑเจฆเจฟเจ†เจ‚ เจฆเฉ‡ เจธเจพเจฐเฉ‡ เจฒเจฟเฉฐเจ•เจพเจ‚ เจจเฉ‚เฉฐ เจจเจฟเจฐเจฏเจพเจค เจ•เฉ€เจคเจพ เจ…เจคเฉ‡ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจฎเจฟเจฒเจพเจ‡เจ† เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ‰เจคเจชเจพเจฆเจจ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจญเฉ‡เจœ เจฆเจฟเฉฑเจคเจพเฅค เจœเฉ‡เจ•เจฐ เจจเฉเจ•เจธเจพเจจ เจตเฉฑเจกเฉ‡ เจชเฉˆเจฎเจพเจจเฉ‡ 'เจคเฉ‡ เจนเจจ, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจธเจฟเจฐเจซเจผ เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจ‰เจคเจธเจผเจพเจนเจฟเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจฎเฉเฉฑเจ– เจตเจœเฉ‹เจ‚ เจตเจฐเจค เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจชเจฐ เจซเจฟเจฐ เจ‰เจธ เจฌเจฟเฉฐเจฆเฉ‚ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจธเจพเจฐเฉ€เจ†เจ‚ เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจ–เจคเจฎ เจนเฉ‹ เจœเจพเจฃเจ—เฉ€เจ†เจ‚ เจœเจฟเจธ เจคเฉฑเจ• เจ…เจธเฉ€เจ‚ เจฎเฉเฉœ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเจพ เจนเฉˆเฅค

เจŸเจพเจˆเจฎเจธเจŸเฉˆเจ‚เจชเจพเจ‚ เจฆเฉ€ เจฌเจœเจพเจ, เจŸเฉเจฐเจพเจ‚เจœเฉˆเจ•เจธเจผเจจ เจ†เจˆเจกเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ เจฌเจฟเจนเจคเจฐ เจนเฉˆเฅค เจ‡เจนเจจเจพเจ‚ IDs เจจเฉ‚เฉฐ เจฐเจฟเจ•เจพเจฐเจก เจ•เจฐเจจเจพ เจฒเจพเจญเจฆเจพเจ‡เจ• เจนเฉˆ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, DDL เจธเจŸเฉ‡เจŸเจฎเฉˆเจ‚เจŸเจพเจ‚ (เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ DROP TABLE), เจตเจฐเจค เจ•เฉ‡ log_statements = 'ddl'. เจœเฉ‡เจ•เจฐ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจŸเฉเจฐเจพเจ‚เจœเฉˆเจ•เจธเจผเจจ เจ†เจˆเจกเฉ€ เจนเฉเฉฐเจฆเฉ€, เจคเจพเจ‚ เจ…เจธเฉ€เจ‚ เจฒเฉˆ เจฒเฉˆเจ‚เจฆเฉ‡ recovery_target_xid เจ…เจคเฉ‡ เจฌเฉ‡เจจเจคเฉ€ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจฒเจˆ เจธเจญ เจ•เฉเจ เจนเฉ‡เจ เจพเจ‚ เจšเจฒเจพ เจ—เจฟเจ† DELETE.

เจ•เฉฐเจฎ 'เจคเฉ‡ เจตเจพเจชเจธ เจœเจพเจฃเจพ เจฌเจนเฉเจค เจธเฉŒเจ–เจพ เจนเฉˆ: เจ‡เจธ เจคเฉ‹เจ‚ เจธเจพเจฐเฉ‡ เจฌเจฆเจฒเจพเจ… เจนเจŸเจพเจ“ recovery.conf เจ…เจคเฉ‡ เจชเฉ‹เจธเจŸเจ—เฉเจฐเฉ‡เจธ เจจเฉ‚เฉฐ เจฎเฉเฉœ เจšเจพเจฒเฉ‚ เจ•เจฐเฉ‹เฅค เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจœเจฒเจฆเฉ€ เจนเฉ€ เจ…เฉฑเจ  เจ˜เฉฐเจŸเฉ‡ เจฆเฉ€ เจฆเฉ‡เจฐเฉ€ เจนเฉ‹เจตเฉ‡เจ—เฉ€, เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจญเจตเจฟเฉฑเจ– เจฆเฉ€เจ†เจ‚ เจฎเฉเจธเฉ€เจฌเจคเจพเจ‚ เจฒเจˆ เจคเจฟเจ†เจฐ เจนเจพเจ‚เฅค

เจฐเจฟเจ•เจตเจฐเฉ€ เจฒเจพเจญ

เจ•เฉ‹เจฒเจก เจฌเฉˆเจ•เจ…เจช เจฆเฉ€ เจฌเจœเจพเจ เจฎเฉเจฒเจคเจตเฉ€ เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€ เจฆเฉ‡ เจจเจพเจฒ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจชเฉเจฐเจพเจฒเฉ‡เจ– เจคเฉ‹เจ‚ เจชเฉ‚เจฐเฉ€ เจšเจฟเฉฑเจคเจฐ เจจเฉ‚เฉฐ เจฌเจนเจพเจฒ เจ•เจฐเจจ เจฒเจˆ เจ˜เฉฐเจŸเฉ‡ เจฌเจฟเจคเจพเจ‰เจฃ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจจเจนเฉ€เจ‚ เจนเฉˆ. เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจชเฉ‚เจฐเจพ เจฎเฉ‚เจฒ 2 เจŸเฉ€เจฌเฉ€ เจฌเฉˆเจ•เจ…เฉฑเจช เจฒเฉˆเจฃ เจตเจฟเฉฑเจš เจธเจพเจจเฉ‚เฉฐ เจชเฉฐเจœ เจ˜เฉฐเจŸเฉ‡ เจฒเฉฑเจ—เจฆเฉ‡ เจนเจจเฅค เจ…เจคเฉ‡ เจซเจฟเจฐ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ…เจœเฉ‡ เจตเฉ€ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ€ เจธเจฅเจฟเจคเฉ€ (เจธเจญ เจคเฉ‹เจ‚ เจฎเจพเฉœเฉ€ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš) เจตเจฟเฉฑเจš เจฎเฉเฉœ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจชเฉ‚เจฐเจพ เจฐเฉ‹เจœเจผเจพเจจเจพ WAL เจฒเจพเจ—เฉ‚ เจ•เจฐเจจเจพ เจชเจตเฉ‡เจ—เจพเฅค

เจ‡เฉฑเจ• เจธเจฅเจ—เจค เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€ เจฆเฉ‹ เจคเจฐเฉ€เจ•เจฟเจ†เจ‚ เจจเจพเจฒ เจ•เฉ‹เจฒเจก เจฌเฉˆเจ•เจ…เฉฑเจช เจจเจพเจฒเฉ‹เจ‚ เจฌเจฟเจนเจคเจฐ เจนเฉˆ:

  1. เจ†เจฐเจ•เจพเจˆเจต เจคเฉ‹เจ‚ เจชเฉ‚เจฐเฉ‡ เจฎเฉ‚เจฒ เจฌเฉˆเจ•เจ…เฉฑเจช เจจเฉ‚เฉฐ เจนเจŸเจพเจ‰เจฃ เจฆเฉ€ เจ•เฉ‹เจˆ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค
  2. WAL เจ–เฉฐเจกเจพเจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจจเจฟเจธเจผเจšเจฟเจค เจ…เฉฑเจ -เจ˜เฉฐเจŸเฉ‡ เจฆเฉ€ เจตเจฟเฉฐเจกเฉ‹ เจนเฉˆ เจœเจฟเจธเจจเฉ‚เฉฐ เจฆเฉเจนเจฐเจพเจ‡เจ† เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค

เจ…เจธเฉ€เจ‚ เจ‡เจน เจฆเฉ‡เจ–เจฃ เจฒเจˆ เจฒเจ—เจพเจคเจพเจฐ เจœเจพเจ‚เจš เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจ•เฉ€ WAL เจคเฉ‹เจ‚ PITR เจฌเจฃเจพเจ‰เจฃเจพ เจธเฉฐเจญเจต เจนเฉˆ, เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจฎเฉเจฒเจคเจตเฉ€ เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€ เจฆเฉ€ เจชเจ›เฉœเจพเจˆ เจฆเฉ€ เจจเจฟเจ—เจฐเจพเจจเฉ€ เจ•เจฐเจ•เฉ‡ WAL เจ†เจฐเจ•เจพเจˆเจต เจตเจฟเฉฑเจš เจญเฉเจฐเจฟเจธเจผเจŸเจพเจšเจพเจฐ เจœเจพเจ‚ เจนเฉ‹เจฐ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจจเฉ‚เฉฐ เจคเฉเจฐเฉฐเจค เจจเฉ‹เจŸเจฟเจธ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค

เจ‡เจธ เจ‰เจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจš, เจธเจพเจจเฉ‚เฉฐ เจฐเฉ€เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจตเจฟเฉฑเจš 50 เจฎเจฟเฉฐเจŸ เจฒเฉฑเจ—เฉ‡, เจฎเจคเจฒเจฌ เจธเจชเฉ€เจก 110 GB WAL เจกเจพเจŸเจพ เจชเฉเจฐเจคเฉ€ เจ˜เฉฐเจŸเจพ เจธเฉ€ (เจชเฉเจฐเจพเจฒเฉ‡เจ– เจ…เจœเฉ‡ เจตเฉ€ เจšเจพเจฒเฉ‚ เจธเฉ€ AWS S3). เจ•เฉเฉฑเจฒ เจฎเจฟเจฒเจพ เจ•เฉ‡, เจ…เจธเฉ€เจ‚ เจธเจฎเฉฑเจธเจฟเจ† เจฆเจพ เจนเฉฑเจฒ เจ•เฉ€เจคเจพ เจ…เจคเฉ‡ 1,5 เจ˜เฉฐเจŸเจฟเจ†เจ‚ เจตเจฟเฉฑเจš เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจฎเฉเฉœ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเจพเฅค

เจจเจคเฉ€เจœเฉ‡: เจœเจฟเฉฑเจฅเฉ‡ เจ‡เฉฑเจ• เจฎเฉเจฒเจคเจตเฉ€ เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€ เจฒเจพเจญเจฆเจพเจ‡เจ• เจนเฉˆ (เจ…เจคเฉ‡ เจœเจฟเฉฑเจฅเฉ‡ เจ‡เจน เจจเจนเฉ€เจ‚ เจนเฉˆ)

เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ—เจฒเจคเฉ€ เจจเจพเจฒ เจกเจพเจŸเจพ เจ—เฉเจ† เจฌเฉˆเจ เจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เฉ€เจคเฉ€ เจฆเฉ‡เจฐเฉ€ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจ‡เจธ เจธเจฎเฉฑเจธเจฟเจ† เจจเฉ‚เฉฐ เจฆเฉ‡เจ–เจฟเจ† เจนเฉˆ เจคเจพเจ‚ เจฆเฉ‡เจฐเฉ€ เจตเจพเจฒเฉ€ เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจชเจนเจฟเจฒเฉ€ เจธเจนเจพเจ‡เจคเจพ เจตเจœเฉ‹เจ‚ เจตเจฐเจคเฉ‹เฅค

เจชเจฐ เจงเจฟเจ†เจจ เจตเจฟเฉฑเจš เจฐเฉฑเจ–เฉ‹: เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€ เจ‡เฉฑเจ• เจฌเฉˆเจ•เจ…เฉฑเจช เจจเจนเฉ€เจ‚ เจนเฉˆเฅค

เจฌเฉˆเจ•เจ…เฉฑเจช เจ…เจคเฉ‡ เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€ เจฆเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจ‰เจฆเฉ‡เจธเจผ เจนเจจเฅค เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจ—เจฒเจคเฉ€ เจจเจพเจฒ เจฌเจฃเจพเจ‡เจ† เจนเฉˆ เจคเจพเจ‚ เจ‡เฉฑเจ• เจ เฉฐเจกเจพ เจฌเฉˆเจ•เจ…เฉฑเจช เจ•เฉฐเจฎ เจ†เจตเฉ‡เจ—เจพ DELETE เจœ DROP TABLE. เจ…เจธเฉ€เจ‚ เจ•เฉ‹เจฒเจก เจธเจŸเฉ‹เจฐเฉ‡เจœ เจคเฉ‹เจ‚ เจฌเฉˆเจ•เจ…เฉฑเจช เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจŸเฉ‡เจฌเจฒ เจœเจพเจ‚ เจชเฉ‚เจฐเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฆเฉ€ เจชเจฟเจ›เจฒเฉ€ เจธเจฅเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจฌเจนเจพเจฒ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค เจชเจฐ เจ‰เจธเฉ‡ เจตเฉ‡เจฒเฉ‡ เจฌเฉ‡เจจเจคเฉ€ DROP TABLE เจตเจฐเจ•เจฟเฉฐเจ— เจ•เจฒเฉฑเจธเจŸเจฐ 'เจคเฉ‡ เจธเจพเจฐเฉ€เจ†เจ‚ เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš เจฒเจ—เจญเจ— เจคเฉเจฐเฉฐเจค เจฆเฉเจฌเจพเจฐเจพ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจ‡เจธเจฒเจˆ เจ†เจฎ เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€ เจ‡เฉฑเจฅเฉ‡ เจฎเจฆเจฆ เจจเจนเฉ€เจ‚ เจ•เจฐเฉ‡เจ—เฉ€เฅค เจœเจฆเฉ‹เจ‚ เจตเจฟเจ…เจ•เจคเฉ€เจ—เจค เจธเจฐเจตเจฐ เจ•เจฟเจฐเจพเจ 'เจคเฉ‡ เจฆเจฟเฉฑเจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ เจ…เจคเฉ‡ เจฒเฉ‹เจก เจจเฉ‚เฉฐ เจตเฉฐเจกเจฆเจพ เจนเฉˆ เจคเจพเจ‚ เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€ เจ–เฉเจฆ เจนเฉ€ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจจเฉ‚เฉฐ เจ‰เจชเจฒเจฌเจง เจฐเฉฑเจ–เจฆเฉ€ เจนเฉˆเฅค

เจธเจฅเจ—เจค เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€ เจฆเฉ‡ เจจเจพเจฒ เจตเฉ€, เจธเจพเจจเฉ‚เฉฐ เจ•เจฆเฉ‡-เจ•เจฆเจพเจˆเจ‚ เจ‡เฉฑเจ• เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจฅเจพเจ‚ 'เจคเฉ‡ เจ‡เฉฑเจ• เจ เฉฐเจกเฉ‡ เจฌเฉˆเจ•เจ…เฉฑเจช เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ เจœเฉ‡เจ•เจฐ เจ•เฉ‹เจˆ เจกเจพเจŸเจพ เจธเฉˆเจ‚เจŸเจฐ เจ…เจธเจซเจฒเจคเจพ, เจฒเฉเจ•เจฟเจ† เจนเฉ‹เจ‡เจ† เจจเฉเจ•เจธเจพเจจ, เจœเจพเจ‚ เจนเฉ‹เจฐ เจ˜เจŸเจจเจพเจตเจพเจ‚ เจตเจพเจชเจฐเจฆเฉ€เจ†เจ‚ เจนเจจ เจœเฉ‹ เจคเฉเจฐเฉฐเจค เจงเจฟเจ†เจจ เจตเจฟเฉฑเจš เจจเจนเฉ€เจ‚ เจ†เจ‰เจ‚เจฆเฉ€เจ†เจ‚ เจนเจจเฅค เจ‡เฉฑเจฅเฉ‡ เจ‡เจ•เฉฑเจฒเฉ‡ เจจเจ•เจฒ เจฆเจพ เจ•เฉ‹เจˆ เจซเจพเจ‡เจฆเจพ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค

เจŸเจฟเฉฑเจชเจฃเฉ€. เจคเฉ‡ GitLab.com เจ…เจธเฉ€เจ‚ เจตเจฐเจคเจฎเจพเจจ เจตเจฟเฉฑเจš เจธเจฟเจธเจŸเจฎ เจชเฉฑเจงเจฐ 'เจคเฉ‡ เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจจเฉเจ•เจธเจพเจจ เจคเฉ‹เจ‚ เจฌเจšเจพเจ… เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจชเฉฑเจงเจฐ 'เจคเฉ‡ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจฎเฉเฉœ เจชเฉเจฐเจพเจชเจค เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹