PostgreSQL-เดจเตŠเดชเตเดชเด‚ เดฆเตเดฐเดจเตเดค เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เดฒเดฟเดจเดพเดฏเดฟ เดžเด™เตเด™เตพ เดŽเด™เตเด™เดจเต†เดฏเดพเดฃเต เด•เดพเดฒเดคเดพเดฎเดธเด‚ เดตเดฐเตเดคเตเดคเดฟเดฏ เดชเด•เตผเดชเตเดชเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดคเต

PostgreSQL-เดจเตŠเดชเตเดชเด‚ เดฆเตเดฐเดจเตเดค เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เดฒเดฟเดจเดพเดฏเดฟ เดžเด™เตเด™เตพ เดŽเด™เตเด™เดจเต†เดฏเดพเดฃเต เด•เดพเดฒเดคเดพเดฎเดธเด‚ เดตเดฐเตเดคเตเดคเดฟเดฏ เดชเด•เตผเดชเตเดชเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดคเต
เดฑเต†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดฌเดพเด•เตเด•เดชเตเดชเต เด…เดฒเตเดฒ. เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด…เดฒเตเดฒ? เด†เด•เดธเตเดฎเดฟเด•เดฎเดพเดฏเดฟ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเดจเตเดจ เด•เตเดฑเตเด•เตเด•เตเดตเดดเดฟเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เดพเตป เดžเด™เตเด™เตพ เดฎเดพเดฑเตเดฑเดฟเดตเต†เดšเตเดš เดชเด•เตผเดชเตเดชเต เดŽเด™เตเด™เดจเต† เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเตเดตเต†เดจเตเดจเดคเต เด‡เดคเดพ.

เด‡เตปเดซเตเดฐเดพเดธเตเดŸเตเดฐเด•เตเดšเตผ เดธเตเดชเต†เดทเตเดฏเดฒเดฟเดธเตเดฑเตเดฑเตเด•เตพ GitLab เด†เดฃเต เดœเต‹เดฒเดฟเดฏเตเดŸเต† เดšเตเดฎเดคเดฒ GitLab.com - เดชเตเดฐเด•เตƒเดคเดฟเดฏเดฟเดฒเต† เดเดฑเตเดฑเดตเตเด‚ เดตเดฒเดฟเดฏ GitLab เด‰เดฆเดพเดนเดฐเดฃเด‚. 3 เดฆเดถเดฒเด•เตเดทเด‚ เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเตเด‚ เดเด•เดฆเต‡เดถเด‚ 7 เดฆเดถเดฒเด•เตเดทเด‚ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เดณเตเด‚ เด‰เดณเตเดณ เด‡เดคเต เดธเดฎเตผเดชเตเดชเดฟเดค เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเดฑเตเดณเตเดณ เดเดฑเตเดฑเดตเตเด‚ เดตเดฒเดฟเดฏ เด“เดชเตเดชเตบ เดธเต‹เดดเตโ€Œเดธเต SaaS เดธเตˆเดฑเตเดฑเตเด•เดณเดฟเดฒเตŠเดจเตเดจเดพเดฃเต. PostgreSQL เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดธเดฟเดธเตเดฑเตเดฑเด‚ เด‡เดฒเตเดฒเดพเดคเต†, GitLab.com เด‡เตปเดซเตเดฐเดพเดธเตเดŸเตเดฐเด•เตเดšเตผ เด…เดงเดฟเด•เด‚ เดฎเตเดจเตเดจเต‹เดŸเตเดŸเต เดชเต‹เด•เดฟเดฒเตเดฒ, เดกเดพเดฑเตเดฑ เดจเดทเตโ€ŒเดŸเดชเตเดชเต†เดŸเตเดฎเตเดชเต‹เตพ เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดชเดฐเดพเดœเดฏเด™เตเด™เตพ เด‰เดฃเตเดŸเดพเดฏเดพเตฝ เดคเต†เดฑเตเดฑเต เดธเดนเดฟเดทเตเดฃเตเดค เด‰เดฑเดชเตเดชเดพเด•เตเด•เดพเตป เดžเด™เตเด™เตพ เดŽเดจเตเดคเดพเดฃเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต. เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เดฆเตเดฐเดจเตเดคเด‚ เดธเด‚เดญเดตเดฟเด•เตเด•เดพเตป เดธเดพเดงเตเดฏเดคเดฏเดฟเดฒเตเดฒ, เดชเด•เตเดทเต‡ เดžเด™เตเด™เตพ เดจเดจเตเดจเดพเดฏเดฟ เดคเดฏเตเดฏเดพเดฑเต†เดŸเตเด•เตเด•เตเด•เดฏเตเด‚ เดตเดฟเดตเดฟเดง เดฌเดพเด•เตเด•เดชเตเดชเต, เดฑเต†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดฎเต†เด•เตเด•เดพเดจเดฟเดธเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดธเด‚เดญเดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเด•เตพ เดฌเดพเด•เตเด•เดชเตเดชเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดฎเดพเตผเด—เดฎเดฒเตเดฒ เดฑเต†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป (เดšเตเดตเดŸเต† เด•เดพเดฃเตเด•). เดŽเดจเตเดจเดพเตฝ เด…เดฒเดธเดฎเดพเดฏ เดชเด•เตผเดชเตเดชเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด†เด•เดธเตเดฎเดฟเด•เดฎเดพเดฏเดฟ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฟเดฏ เดกเดพเดฑเตเดฑ เดŽเด™เตเด™เดจเต† เดตเต‡เด—เดคเตเดคเดฟเตฝ เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เดพเดฎเต†เดจเตเดจเต เด‡เดชเตเดชเต‹เตพ เดจเดฎเตเดฎเตพ เด•เดพเดฃเตเด‚: เด“เตบ GitLab.com เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เด•เตเดฑเตเด•เตเด•เตเดตเดดเดฟ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฟ เดชเดฆเตเดงเดคเดฟเด•เตเด•เดพเดฏเดฟ gitlab-ce เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเด‚ เดŸเดพเดธเตเด•เตเด•เตเด•เดณเตเด‚ เด‰เดณเตเดณ เด•เดฃเด•เตเดทเดจเตเด•เตพ เดจเดทเตเดŸเดชเตเดชเต†เดŸเตเดŸเต.

เดฎเดพเดฑเตเดฑเดฟเดตเต†เดšเตเดš เด’เดฐเต เดชเด•เตผเดชเตเดชเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดตเต†เดฑเตเด‚ 1,5 เดฎเดฃเดฟเด•เตเด•เต‚เดฑเดฟเดจเตเดณเตเดณเดฟเตฝ เดžเด™เตเด™เตพ เดกเดพเดฑเตเดฑ เดตเต€เดฃเตเดŸเต†เดŸเตเดคเตเดคเต. เด…เดคเต เดŽเด™เตเด™เดจเต† เดธเด‚เดญเดตเดฟเดšเตเดšเตเดตเต†เดจเตเดจเต เดจเต‹เด•เตเด•เต‚.

PostgreSQL เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดธเดฎเดฏ เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เตฝ เดชเต‹เดฏเดฟเดจเตเดฑเต เดšเต†เดฏเตเดฏเตเด•

PostgreSQL-เดจเต เด’เดฐเต เดฌเดฟเตฝเดฑเตเดฑเต-เด‡เตป เดซเด‚เด—เตเดทเตป เด‰เดฃเตเดŸเต, เด…เดคเต เด’เดฐเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดจเตเดฑเต† เด…เดตเดธเตเดฅเดฏเต† เด’เดฐเต เดจเดฟเดถเตเดšเดฟเดค เดธเดฎเดฏเดคเตเดคเต‡เด•เตเด•เต เดชเตเดจเดƒเดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดคเต เดตเดฟเดณเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเดคเต เดชเต‹เดฏเดฟเดจเตเดฑเต-เด‡เตป-เดŸเตˆเด‚ เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เตฝ (PITR) เด•เต‚เดŸเดพเดคเต† เดชเด•เตผเดชเตเดชเต เด•เดพเดฒเดฟเด•เดฎเดพเดฏเดฟ เดจเดฟเดฒเดจเดฟเตผเดคเตเดคเตเดจเตเดจ เด…เดคเต‡ เดฎเต†เด•เตเด•เดพเดจเดฟเดธเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต: เดฎเตเดดเตเดตเตป เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดจเตเดฑเต† (เดฌเต‡เดธเต เดฌเดพเด•เตเด•เดชเตเดชเต) เดตเดฟเดถเตเดตเดธเดจเต€เดฏเดฎเดพเดฏ เดธเตเดจเดพเดชเตเดชเตเดทเต‹เดŸเตเดŸเดฟเตฝ เดจเดฟเดจเตเดจเต เด†เดฐเด‚เดญเดฟเดšเตเดšเต, เด’เดฐเต เดจเดฟเดถเตเดšเดฟเดค เดธเดฎเดฏเด‚ เดตเดฐเต† เดžเด™เตเด™เตพ เดธเด‚เดธเตเดฅเดพเดจ เดฎเดพเดฑเตเดฑเด™เตเด™เดณเตเดŸเต† เด’เดฐเต เดถเตเดฐเต‡เดฃเดฟ เดชเตเดฐเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต.

เด•เต‹เตพเดกเต เดฌเดพเด•เตเด•เดชเตเดชเดฟเดจเดพเดฏเดฟ เดˆ เดซเต€เดšเตเดšเตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดžเด™เตเด™เตพ เดชเดคเดฟเดตเดพเดฏเดฟ เด’เดฐเต เด…เดŸเดฟเดธเตเดฅเดพเดจ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดฌเดพเด•เตเด•เดชเตเดชเต เด‰เดฃเตเดŸเดพเด•เตเด•เตเด•เดฏเตเด‚ เด…เดคเต เด’เดฐเต เด†เตผเด•เตเด•เตˆเดตเดฟเตฝ เดธเต‚เด•เตเดทเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต (GitLab เด†เตผเด•เตเด•เตˆเดตเตเด•เตพ เดœเต€เดตเดฟเด•เตเด•เตเดจเตเดจเดคเต Google เด•เตเดฒเต—เดกเต เดธเด‚เดญเดฐเดฃเด‚). เดฑเตˆเดฑเตเดฑเต-เดŽเดนเต†เดกเต เดฒเต‹เด—เต เด†เตผเด•เตเด•เตˆเดตเต เดšเต†เดฏเตเดคเตเด•เตŠเดฃเตเดŸเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดจเตเดฑเต† เด…เดตเดธเตเดฅเดฏเดฟเดฒเต† เดฎเดพเดฑเตเดฑเด™เตเด™เดณเตเด‚ เดžเด™เตเด™เตพ เดจเดฟเดฐเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต (เดŽเดดเตเดคเดพเดจเตเดณเตเดณ เดฒเต‹เด—เต, 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 เดธเต†เด—เตโ€Œเดฎเต†เดจเตเดฑเตเด•เตพ เดตเต‡เตผเดคเดฟเดฐเดฟเดšเตเดšเต†เดŸเตเด•เตเด•เดพเตป (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เดตเต€เดฃเตเดŸเตเด‚ เดถเตเดฐเดฎเดฟเดšเตเดšเดคเดฟเดจเต เดถเต‡เดทเด‚ เดธเด‚เดญเดตเด‚ เด…เดŸเดฏเตโ€Œเด•เตเด•เดพเดจเต‹ เดชเตเดฐเดฎเต‹เดŸเตเดŸเต เดšเต†เดฏเตเดฏเดพเดจเต‹ เดคเดพเตฝเด•เตเด•เดพเดฒเดฟเด•เดฎเดพเดฏเดฟ เดจเดฟเตผเดคเตเดคเดพเดจเต‹ (เดกเดฟเดซเต‹เตพเดŸเตเดŸเดพเดฏเดฟ เด‡เดคเต เดคเดพเตฝเด•เตเด•เดพเดฒเดฟเด•เดฎเดพเดฏเดฟ เดจเดฟเตผเดคเตเดคเดฟเดตเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต).

เดจเดฟเตผเดญเดพเด—เตเดฏเด•เดฐเดฎเดพเดฏ เด† เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเตเด•เตเด•เต เดฎเตเดฎเตเดชเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เด…เดคเดฟเดจเตเดฑเต† เด…เดตเดธเตเดฅเดฏเดฟเดฒเต‡เด•เตเด•เต เดฎเดŸเด™เตเด™เดฟ. เด‡เดชเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดกเดพเดฑเตเดฑ เดŽเด•เตเดธเตเดชเต‹เตผเดŸเตเดŸเต เดšเต†เดฏเตเดฏเดพเด‚. เดžเด™เตเด™เตพ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฟเดฏ เดฒเต‡เดฌเตฝ เดกเดพเดฑเตเดฑเดฏเตเด‚ เดชเตเดฐเดถเตโ€Œเดจเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดŽเดฒเตเดฒเดพ เดฒเดฟเด™เตเด•เตเด•เดณเตเด‚ เดŽเด•เตโ€Œเดธเตโ€Œเดชเต‹เตผเดŸเตเดŸเตเดšเต†เดฏเตโ€Œเดคเต, เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เดฒเดฏเดฟเดชเตเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดต เดชเตเดฐเตŠเดกเด•เตเดทเตป เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต‡เด•เตเด•เต เดจเต€เด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต. เดจเดทเตเดŸเด™เตเด™เตพ เดตเดฒเดฟเดฏ เดคเต‹เดคเดฟเดฒเตเดณเตเดณเดคเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเด•เตผเดชเตเดชเต เดชเตเดฐเดฎเต‹เดŸเตเดŸเต เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เดชเตเดฐเดงเดพเดจเดฎเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚. เดŽเดจเตเดจเดพเตฝ เดจเดฎเตเดฎเตพ เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เตเดจเตเดจ เดชเต‹เดฏเดฟเดจเตเดฑเดฟเดจเต เดถเต‡เดทเดฎเตเดณเตเดณ เดŽเดฒเตเดฒเดพ เดฎเดพเดฑเตเดฑเด™เตเด™เดณเตเด‚ เดจเดทเตเดŸเดชเตเดชเต†เดŸเตเด‚.

เดŸเตˆเด‚เดธเตเดฑเตเดฑเดพเดฎเตเดชเตเด•เตพเด•เตเด•เต เดชเด•เดฐเด‚, เด‡เดŸเดชเดพเดŸเต เดเดกเดฟเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดพเดฃเต เดจเดฒเตเดฒเดคเต. เดˆ เดเดกเดฟเด•เตพ เดฑเต†เด•เตเด•เต‹เตผเดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เด‰เดชเดฏเต‹เด—เดชเตเดฐเดฆเดฎเดพเดฃเต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, DDL เดชเตเดฐเดธเตเดคเดพเดตเดจเด•เตพเด•เตเด•เต (เด‰เดฆเดพ DROP TABLE), เด‰เดชเดฏเต‡เดพเด—เดฟเดšเตเดšเต log_statements = 'ddl'. เดžเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เด‡เดŸเดชเดพเดŸเต เดเดกเดฟ เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดžเด™เตเด™เตพ เดŽเดŸเตเด•เตเด•เตเด‚ recovery_target_xid เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเตโ€Œเด•เตเด•เต เดฎเตเดฎเตเดชเตเดณเตเดณ เด‡เดŸเดชเดพเดŸเต เดตเดฐเต† เดŽเดฒเตเดฒเดพเด‚ เดจเดŸเดคเตเดคเดฟ DELETE.

เดœเต‹เดฒเดฟเดฏเดฟเตฝ เดคเดฟเดฐเดฟเดšเตเดšเต†เดคเตเดคเตเดจเตเดจเดคเต เดตเดณเดฐเต† เดฒเดณเดฟเดคเดฎเดพเดฃเต: เด‡เดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดŽเดฒเตเดฒเดพ เดฎเดพเดฑเตเดฑเด™เตเด™เดณเตเด‚ เดจเต€เด•เตเด•เด‚ เดšเต†เดฏเตเดฏเตเด• recovery.conf เดชเต‹เดธเตเดฑเตเดฑเตเด—เตเดฐเต†เดธเต เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเด•เตเด•เตเด•. เดชเด•เตผเดชเตเดชเดฟเดจเต เด‰เดŸเตป เดคเดจเตเดจเต† เดตเต€เดฃเตเดŸเตเด‚ เดŽเดŸเตเดŸเต เดฎเดฃเดฟเด•เตเด•เต‚เตผ เด•เดพเดฒเดคเดพเดฎเดธเด‚ เด‰เดฃเตเดŸเดพเด•เตเด‚, เดญเดพเดตเดฟเดฏเดฟเดฒเต† เดชเตเดฐเดถเตโ€Œเดจเด™เตเด™เตพเด•เตเด•เต เดžเด™เตเด™เตพ เดคเดฏเตเดฏเดพเดฑเดพเดฃเต.

เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เตฝ เด†เดจเตเด•เต‚เดฒเตเดฏเด™เตเด™เตพ

เดคเดฃเตเดคเตเดค เดฌเดพเด•เตเด•เดชเตเดชเดฟเดจเต เดชเด•เดฐเด‚ เดฎเดพเดฑเตเดฑเดฟเดตเต†เดšเตเดš เด’เดฐเต เดชเด•เตผเดชเตเดชเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เด†เตผเด•เตเด•เตˆเดตเดฟเตฝ เดจเดฟเดจเตเดจเต เดฎเตเดดเตเดตเตป เดšเดฟเดคเตเดฐเดตเตเด‚ เดชเตเดจเดƒเดธเตเดฅเดพเดชเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เตพ เดฎเดฃเดฟเด•เตเด•เต‚เดฑเตเด•เดณเต‹เดณเด‚ เดšเต†เดฒเดตเดดเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดฟเดฒเตเดฒ. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด…เดŸเดฟเดธเตเดฅเดพเดจ 2 TB เดฌเดพเด•เตเด•เดชเตเดชเต เดฒเดญเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพเด•เตเด•เต เด…เดžเตเดšเต เดฎเดฃเดฟเด•เตเด•เต‚เตผ เดŽเดŸเตเด•เตเด•เตเด‚. เด†เดตเดถเตเดฏเดฎเตเดณเตเดณ เด…เดตเดธเตเดฅเดฏเดฟเดฒเต‡เด•เตเด•เต (เดเดฑเตเดฑเดตเตเด‚ เดฎเต‹เดถเด‚ เด…เดตเดธเตเดฅเดฏเดฟเตฝ) เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เตพ เด‡เดชเตเดชเต‹เดดเตเด‚ เดฎเตเดดเตเดตเตป เดชเตเดฐเดคเดฟเดฆเดฟเดจ 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

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•