WAL-G: PostgreSQL DBMS เจฆเจพ เจฌเฉˆเจ•เจ…เฉฑเจช เจ…เจคเฉ‡ เจฐเจฟเจ•เจตเจฐเฉ€

เจ‡เจน เจฒเฉฐเจฌเฉ‡ เจธเจฎเฉ‡เจ‚ เจคเฉ‹เจ‚ เจœเจพเจฃเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ•เจฟ SQL เจกเฉฐเจชเจพเจ‚ เจตเจฟเฉฑเจš เจฌเฉˆเจ•เจ…เฉฑเจช เจฌเจฃเจพเจ‰เจฃเจพ (เจตเจฐเจคเฉ‹เจ‚ pg_dump เจœ pg_dumpall) เจ‡เฉฑเจ• เจšเฉฐเจ—เจพ เจตเจฟเจšเจพเจฐ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค PostgreSQL DBMS เจฆเจพ เจฌเฉˆเจ•เจ…เฉฑเจช เจฒเฉˆเจฃ เจฒเจˆ, เจ•เจฎเจพเจ‚เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ เจฌเจฟเจนเจคเจฐ เจนเฉˆ pg_basebackup, เจœเฉ‹ WAL เจฒเฉŒเจ—เจธ เจฆเฉ€ เจฌเจพเจˆเจจเจฐเฉ€ เจ•เจพเจชเฉ€ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆเฅค เจชเจฐ เจœเจฆเฉ‹เจ‚ เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจ•เจพเจชเฉ€ เจฌเจฃเจพเจ‰เจฃ เจ…เจคเฉ‡ เจฐเฉ€เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจฆเฉ€ เจชเฉ‚เจฐเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฆเจพ เจ…เจงเจฟเจเจจ เจ•เจฐเจจเจพ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจธเจฎเจเฉ‹เจ—เฉ‡ เจ•เจฟ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจธ เจฆเฉ‡ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจฆเฉ‹ เจŸเฉเจฐเจพเจˆเจธเจพเจˆเจ•เจฒ เจฒเจฟเจ–เจฃ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ เจ…เจคเฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‰เฉฑเจชเจฐ เจ…เจคเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจฆเฉ‹เจตเจพเจ‚ เจตเจฟเฉฑเจš เจฆเจฐเจฆ เจจเจนเฉ€เจ‚ เจนเฉ‹เจตเฉ‡เจ—เจพ. เจฆเฉเฉฑเจ–เจพเจ‚ เจจเฉ‚เฉฐ เจฆเฉ‚เจฐ เจ•เจฐเจจ เจฒเจˆ, WAL-G เจตเจฟเจ•เจธเจฟเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€เฅค

เจตเจพเจฒ-เจœเฉ€ PostgreSQL เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจจเฉ‚เฉฐ เจฌเฉˆเจ•เจ…เฉฑเจช เจ…เจคเฉ‡ เจฐเฉ€เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจฒเจˆ เจ—เฉ‹ เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฟเจ† เจ‡เฉฑเจ• เจŸเฉ‚เจฒ เจนเฉˆ (เจ…เจคเฉ‡ เจนเจพเจฒ เจนเฉ€ เจตเจฟเฉฑเจš MySQL/MariaDB, MongoDB เจ…เจคเฉ‡ FoundationDB). เจ‡เจน เจเจฎเจพเจœเจผเจพเจจ S3 เจธเจŸเฉ‹เจฐเฉ‡เจœเจผ (เจ…เจคเฉ‡ เจเจจเจพเจฒเจพเจ—, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจฏเจพเจ‚เจกเฉ‡เจ•เจธ เจ†เจฌเจœเฉˆเจ•เจŸ เจธเจŸเฉ‹เจฐเฉ‡เจœ), เจจเจพเจฒ เจนเฉ€ เจ—เฉ‚เจ—เจฒ เจ•เจฒเจพเจ‰เจก เจธเจŸเฉ‹เจฐเฉ‡เจœ, เจ…เจœเจผเฉ‚เจฐ เจธเจŸเฉ‹เจฐเฉ‡เจœ, เจธเจตเจฟเจซเจŸ เจ†เจฌเจœเฉˆเจ•เจŸ เจธเจŸเฉ‹เจฐเฉ‡เจœ เจ…เจคเฉ‡ เจธเจฟเจฐเจซเจผ เจซเจพเจˆเจฒ เจธเจฟเจธเจŸเจฎ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจชเฉ‚เจฐเจพ เจธเฉˆเจŸเจ…เจช เจธเจงเจพเจฐเจจ เจ•เจฆเจฎเจพเจ‚ 'เจคเฉ‡ เจ†เจ‰เจ‚เจฆเจพ เจนเฉˆ, เจชเจฐ เจ‡เจธ เจคเฉฑเจฅ เจฆเฉ‡ เจ•เจพเจฐเจจ เจ•เจฟ เจ‡เจธ เจฌเจพเจฐเฉ‡ เจฒเฉ‡เจ– เจชเฉ‚เจฐเฉ‡ เจ‡เฉฐเจŸเจฐเจจเฉˆเจŸ เจตเจฟเฉฑเจš เจ–เจฟเฉฐเจกเฉ‡ เจนเฉ‹เจ เจนเจจ, เจ‡เฉฑเจฅเฉ‡ เจ•เฉ‹เจˆ เจธเฉฐเจชเฉ‚เจฐเจจ เจ•เจฟเจตเฉ‡เจ‚-เจ•เจฐเจจเฉ€ เจฎเฉˆเจจเฉ‚เจ…เจฒ เจจเจนเฉ€เจ‚ เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš เจธเจผเฉเจฐเฉ‚ เจคเฉ‹เจ‚ เจฒเฉˆ เจ•เฉ‡ เจ…เฉฐเจค เจคเฉฑเจ• เจธเจพเจฐเฉ‡ เจชเฉœเจพเจ… เจธเจผเจพเจฎเจฒ เจนเฉ‹เจฃเจ—เฉ‡ (เจนเจฌเจฐเฉ‡ 'เจคเฉ‡ เจ•เจˆ เจชเฉ‹เจธเจŸเจพเจ‚ เจนเจจ, เจชเจฐ เจ‰เฉฑเจฅเฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจ…เฉฐเจ• เจ–เฉเฉฐเจ เจ—เจ เจนเจจ)เฅค

WAL-G: PostgreSQL DBMS เจฆเจพ เจฌเฉˆเจ•เจ…เฉฑเจช เจ…เจคเฉ‡ เจฐเจฟเจ•เจตเจฐเฉ€

เจ‡เจน เจฒเฉ‡เจ– เจฎเฉเฉฑเจ– เจคเฉŒเจฐ 'เจคเฉ‡ เจฎเฉ‡เจฐเฉ‡ เจ—เจฟเจ†เจจ เจจเฉ‚เฉฐ เจตเจฟเจตเจธเจฅเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจฒเจฟเจ–เจฟเจ† เจ—เจฟเจ† เจธเฉ€เฅค เจฎเฉˆเจ‚ เจ‡เฉฑเจ• DBA เจจเจนเฉ€เจ‚ เจนเจพเจ‚ เจ…เจคเฉ‡ เจฎเฉˆเจ‚ เจ†เจชเจฃเฉ‡ เจ†เจช เจจเฉ‚เฉฐ เจ•เจฟเจคเฉ‡ เจตเฉ€ เจ†เจฎ เจ†เจฆเจฎเฉ€ เจฆเฉ€ เจญเจพเจธเจผเจพ เจตเจฟเฉฑเจš เจชเฉเจฐเจ—เจŸ เจ•เจฐ เจธเจ•เจฆเจพ/เจธเจ•เจฆเฉ€ เจนเจพเจ‚, เจ‡เจธ เจฒเจˆ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจธเฉเจงเจพเจฐ เจฆเจพ เจธเจตเจพเจ—เจค เจนเฉˆ!

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

เจธเฉˆเจŸเจฟเฉฐเจ—

เจ‡เจธ เจฒเฉ‡เจ– เจจเฉ‚เฉฐ เจฒเจฟเจ–เจฃ เจฆเฉ‡ เจธเจฎเฉ‡เจ‚, WAL-G เจฆเจพ เจธเจฅเจฟเจฐ เจธเฉฐเจธเจ•เจฐเจฃ เจนเฉˆ v0.2.15 (เจฎเจพเจฐเจš 2020). เจ‡เจน เจ‰เจน เจนเฉˆ เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจตเจฐเจคเจพเจ‚เจ—เฉ‡ (เจชเจฐ เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจจเฉ‚เฉฐ เจฎเจพเจธเจŸเจฐ เจฌเฉเจฐเจพเจ‚เจš เจคเฉ‹เจ‚ เจ–เฉเจฆ เจฌเจฃเจพเจ‰เจฃเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจ—เฉ€เจฅเจฌ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจ•เฉ‹เจฒ เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจธเจพเจฐเฉ€เจ†เจ‚ เจนเจฆเจพเจ‡เจคเจพเจ‚ เจนเจจ). เจกเจพเจŠเจจเจฒเฉ‹เจก เจ…เจคเฉ‡ เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเจจ เจฒเจˆ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจน เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ:

#!/bin/bash

curl -L "https://github.com/wal-g/wal-g/releases/download/v0.2.15/wal-g.linux-amd64.tar.gz" -o "wal-g.linux-amd64.tar.gz"
tar -xzf wal-g.linux-amd64.tar.gz
mv wal-g /usr/local/bin/

เจ‡เจธ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจชเจนเจฟเจฒเจพเจ‚ WAL-G, เจ…เจคเฉ‡ เจซเจฟเจฐ PostgreSQL เจจเฉ‚เฉฐ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค

WAL-G เจธเฉˆเฉฑเจŸเจ…เฉฑเจช เจ•เฉ€เจคเจพ เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆ

เจฌเฉˆเจ•เจ…เฉฑเจช เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจฆเฉ€ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, Amazon S3 เจตเจฐเจคเจฟเจ† เจœเจพเจตเฉ‡เจ—เจพ (เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจน เจฎเฉ‡เจฐเฉ‡ เจธเจฐเจตเจฐเจพเจ‚ เจฆเฉ‡ เจจเฉ‡เฉœเฉ‡ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจฌเจนเฉเจค เจธเจธเจคเฉ€ เจนเฉˆ). เจ‡เจธเจฆเฉ‡ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• "s3 เจฌเจพเจฒเจŸเฉ€" เจ…เจคเฉ‡ เจเจ•เจธเฉˆเจธ เจ•เฉเฉฐเจœเฉ€เจ†เจ‚ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค

WAL-G เจฌเจพเจฐเฉ‡ เจธเจพเจฐเฉ‡ เจชเจฟเจ›เจฒเฉ‡ เจฒเฉ‡เจ– เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจธเฉฐเจฐเจšเจจเจพ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจจ, เจชเจฐ เจ‡เจธ เจฐเฉ€เจฒเฉ€เจœเจผ เจฆเฉ‡ เจจเจพเจฒ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจตเจฟเฉฑเจš เจธเจฅเจฟเจค เจนเฉ‹ เจธเจ•เจฆเฉ€เจ†เจ‚ เจนเจจ .walg.json เจซเจผเจพเจˆเจฒ เจชเฉ‹เจธเจŸเจ—เฉเจฐเฉ‡เจธ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฆเฉ€ เจนเฉ‹เจฎ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจตเจฟเฉฑเจš. เจ‡เจธเจจเฉ‚เฉฐ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ, เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ€ เจฌเฉˆเจธเจผ เจธเจ•เฉเจฐเจฟเจชเจŸ เจšเจฒเจพเจ“:

#!/bin/bash

cat > /var/lib/postgresql/.walg.json << EOF
{
    "WALG_S3_PREFIX": "s3://your_bucket/path",
    "AWS_ACCESS_KEY_ID": "key_id",
    "AWS_SECRET_ACCESS_KEY": "secret_key",
    "WALG_COMPRESSION_METHOD": "brotli",
    "WALG_DELTA_MAX_STEPS": "5",
    "PGDATA": "/var/lib/postgresql/12/main",
    "PGHOST": "/var/run/postgresql/.s.PGSQL.5432"
}
EOF
# ะพะฑัะทะฐั‚ะตะปัŒะฝะพ ะผะตะฝัะตะผ ะฒะปะฐะดะตะปัŒั†ะฐ ั„ะฐะนะปะฐ:
chown postgres: /var/lib/postgresql/.walg.json

เจฎเฉˆเจจเฉ‚เฉฐ เจธเจพเจฐเฉ‡ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจ‚ เจฌเจพเจฐเฉ‡ เจฅเฉ‹เฉœเจพ เจœเจฟเจนเจพ เจธเจฎเจเจพเจ‰เจฃ เจฆเจฟเจ“:

  • WALG_S3_PREFIX - เจคเฉเจนเจพเจกเฉ€ S3 เจฌเจพเจฒเจŸเฉ€ เจฆเจพ เจฎเจพเจฐเจ— เจœเจฟเฉฑเจฅเฉ‡ เจฌเฉˆเจ•เจ…เฉฑเจช เจ…เฉฑเจชเจฒเฉ‹เจก เจ•เฉ€เจคเฉ‡ เจœเจพเจฃเจ—เฉ‡ (เจคเฉเจธเฉ€เจ‚ เจœเจพเจ‚ เจคเจพเจ‚ เจฐเฉ‚เจŸ เจœเจพเจ‚ เจซเฉ‹เจฒเจกเจฐ เจตเจฟเฉฑเจš เจœเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹);
  • AWS_ACCESS_KEY_ID - S3 เจตเจฟเฉฑเจš เจชเจนเฉเฉฐเจš เจ•เฉเฉฐเจœเฉ€ (เจ‡เฉฑเจ• เจŸเฉˆเจธเจŸ เจธเจฐเจตเจฐ 'เจคเฉ‡ เจฐเจฟเจ•เจตเจฐเฉ€ เจฆเฉ‡ เจฎเจพเจฎเจฒเฉ‡ เจตเจฟเฉฑเจš, เจ‡เจนเจจเจพเจ‚ เจ•เฉเฉฐเจœเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš เจฐเฉ€เจกเจ“เจจเจฒเฉ€ เจจเฉ€เจคเฉ€ เจนเฉ‹เจฃเฉ€ เจšเจพเจนเฉ€เจฆเฉ€ เจนเฉˆ! เจ‡เจน เจฐเจฟเจ•เจตเจฐเฉ€ 'เจคเฉ‡ เจญเจพเจ— เจตเจฟเฉฑเจš เจนเฉ‹เจฐ เจตเฉ‡เจฐเจตเฉ‡ เจตเจฟเฉฑเจš เจฆเฉฑเจธเจฟเจ† เจ—เจฟเจ† เจนเฉˆ.);
  • AWS_SECRET_ACCESS_KEY - S3 เจธเจŸเฉ‹เจฐเฉ‡เจœเจผ เจตเจฟเฉฑเจš เจ—เฉเจชเจค เจ•เฉเฉฐเจœเฉ€;
  • WALG_COMPRESSION_METHOD - เจ•เฉฐเจชเจฐเฉˆเจธเจผเจจ เจตเจฟเจงเฉ€, เจฌเฉเจฐเฉ‹เจŸเจฒเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ เจฌเจฟเจนเจคเจฐ เจนเฉˆ (เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจน เจ…เฉฐเจคเจฎ เจ†เจ•เจพเจฐ เจ…เจคเฉ‡ เจ•เฉฐเจชเจฐเฉˆเจธเจผเจจ/เจกเฉ€เจ•เฉฐเจชเฉเจฐเฉ‡เจธเจผเจจ เจธเจชเฉ€เจก เจตเจฟเจšเจ•เจพเจฐ เจธเฉเจจเจนเจฟเจฐเฉ€ เจฎเฉฑเจงเจฎเจพเจจ เจนเฉˆ);
  • WALG_DELTA_MAX_STEPS - เจชเฉ‚เจฐเจพ เจฌเฉˆเจ•เจ…เฉฑเจช เจฌเจฃเจพเจ‰เจฃ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ "เจกเฉˆเจฒเจŸเจพ" เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€ (เจ‰เจน เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เฉ€เจคเฉ‡ เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจ…เจคเฉ‡ เจ†เจ•เจพเจฐ เจฆเฉ€ เจฌเจšเจค เจ•เจฐเจฆเฉ‡ เจนเจจ, เจชเจฐ เจฐเจฟเจ•เจตเจฐเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจฅเฉ‹เฉœเฉเจนเจพ เจนเฉŒเจฒเฉ€ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจจ, เจ‡เจธ เจฒเจˆ เจตเฉฑเจกเฉ‡ เจฎเฉเฉฑเจฒเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€ เจธเจฒเจพเจน เจจเจนเฉ€เจ‚ เจฆเจฟเฉฑเจคเฉ€ เจœเจพเจ‚เจฆเฉ€);
  • PGDATA - เจคเฉเจนเจพเจกเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจกเฉ‡เจŸเจพ เจจเจพเจฒ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจฆเจพ เจฎเจพเจฐเจ— (เจคเฉเจธเฉ€เจ‚ เจ•เจฎเจพเจ‚เจก เจšเจฒเจพ เจ•เฉ‡ เจชเจคเจพ เจฒเจ—เจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹ pg_lscluster);
  • PGHOST - เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจจเจพเจฒ เจœเฉเฉœเจจเจพ, เจธเจฅเจพเจจเจ• เจฌเฉˆเจ•เจ…เฉฑเจช เจฆเฉ‡ เจจเจพเจฒ เจ‡เจธ เจจเฉ‚เฉฐ เจฏเฉ‚เจจเจฟเจ•เจธ-เจธเจพเจ•เจŸ เจฆเฉเจ†เจฐเจพ เจ•เจฐเจจเจพ เจฌเจฟเจนเจคเจฐ เจนเฉˆ เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ‡เจธ เจ‰เจฆเจพเจนเจฐเจฃ เจตเจฟเฉฑเจš เจนเฉˆเฅค

เจนเฉ‹เจฐ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจตเจฟเฉฑเจš เจฒเฉฑเจญเฉ‡ เจœเจพ เจธเจ•เจฆเฉ‡ เจนเจจ: https://github.com/wal-g/wal-g/blob/v0.2.15/PostgreSQL.md#configuration.

PostgreSQL เจธเฉˆเจŸ เจ…เจช เจ•เจฐเจจเจพ

เจกเจพเจŸเจพเจฌเฉ‡เจธ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจ†เจฐเจ•เจพเจˆเจตเจฐ เจจเฉ‚เฉฐ เจ•เจฒเจพเจ‰เจก 'เจคเฉ‡ WAL เจฒเฉŒเจ—เจธ เจ…เฉฑเจชเจฒเฉ‹เจก เจ•เจฐเจจ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจคเฉ‹เจ‚ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจฎเฉเฉœ เจฌเจนเจพเจฒ เจ•เจฐเจจ เจฒเจˆ (เจœเฉ‡ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡), เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจ•เจˆ เจฎเจพเจชเจฆเฉฐเจก เจธเฉˆเฉฑเจŸ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค /etc/postgresql/12/main/postgresql.conf. เจธเจฟเจฐเจซเจผ เจธเจผเฉเจฐเฉ‚เจ†เจค เจ•เจฐเจจ เจตเจพเจฒเจฟเจ†เจ‚ เจฒเจˆ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเจ•เจฟ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ€เจ†เจ‚ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ•เฉ‹เจˆ เจตเฉ€ เจ•เจฟเจธเฉ‡ เจนเฉ‹เจฐ เจฎเฉเฉฑเจฒ 'เจคเฉ‡ เจธเฉˆเฉฑเจŸ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจนเฉˆ, เจคเจพเจ‚ เจœเฉ‹ เจœเจฆเฉ‹เจ‚ เจธเฉฐเจฐเจšเจจเจพ เจฎเฉเฉœ เจฒเฉ‹เจก เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, เจคเจพเจ‚ DBMS เจ•เจฐเฉˆเจธเจผ เจจเจพ เจนเฉ‹เจตเฉ‡เฅค เจคเฉเจธเฉ€เจ‚ เจ‡เจนเจจเจพเจ‚ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจœเฉ‹เฉœ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

#!/bin/bash

echo "wal_level=replica" >> /etc/postgresql/12/main/postgresql.conf
echo "archive_mode=on" >> /etc/postgresql/12/main/postgresql.conf
echo "archive_command='/usr/local/bin/wal-g wal-push "%p" >> /var/log/postgresql/archive_command.log 2>&1' " >> /etc/postgresql/12/main/postgresql.conf
echo โ€œarchive_timeout=60โ€ >> /etc/postgresql/12/main/postgresql.conf
echo "restore_command='/usr/local/bin/wal-g wal-fetch "%f" "%p" >> /var/log/postgresql/restore_command.log 2>&1' " >> /etc/postgresql/12/main/postgresql.conf

# ะฟะตั€ะตะทะฐะณั€ัƒะถะฐะตะผ ะบะพะฝั„ะธะณ ั‡ะตั€ะตะท ะพั‚ะฟั€ะฐะฒะบัƒ SIGHUP ัะธะณะฝะฐะปะฐ ะฒัะตะผ ะฟั€ะพั†ะตััะฐะผ ะ‘ะ”
killall -s HUP postgres

เจธเฉˆเฉฑเจŸ เจ•เฉ€เจคเฉ‡ เจœเจพเจฃ เจตเจพเจฒเฉ‡ เจฎเจพเจชเจฆเฉฐเจกเจพเจ‚ เจฆเจพ เจตเฉ‡เจฐเจตเจพ:

  • wal_level - WAL เจฒเฉŒเจ—เจธ เจตเจฟเฉฑเจš เจ•เจฟเฉฐเจจเฉ€ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฒเจฟเจ–เจฃเฉ€ เจนเฉˆ, "เจฐเจฟเจชเจฒเฉ€เจ•เจพ" - เจธเจญ เจ•เฉเจ เจฒเจฟเจ–เฉ‹;
  • เจชเฉเจฐเจพเจฒเฉ‡เจ–_เจฎเฉ‹เจก - เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจคเฉ‹เจ‚ เจ•เจฎเจพเจ‚เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ WAL เจฒเฉŒเจ—เจธ เจจเฉ‚เฉฐ เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เจฐเจจ เจจเฉ‚เฉฐ เจธเจฎเจฐเฉฑเจฅ เจฌเจฃเจพเจ“ archive_command;
  • archive_command - เจ‡เฉฑเจ• เจฎเฉเจ•เฉฐเจฎเจฒ WAL เจฒเฉŒเจ— เจจเฉ‚เฉฐ เจ†เจฐเจ•เจพเจˆเจต เจ•เจฐเจจ เจฒเจˆ เจ•เจฎเจพเจ‚เจก;
  • archive_timeout - เจฒเฉŒเจ—เจธ เจฆเจพ เจชเฉเจฐเจพเจฒเฉ‡เจ– เจ‰เจฆเฉ‹เจ‚ เจนเฉ€ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจœเจฆเฉ‹เจ‚ เจ‡เจน เจชเฉ‚เจฐเจพ เจนเฉ‹ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจชเจฐ เจœเฉ‡เจ•เจฐ เจคเฉเจนเจพเจกเจพ เจธเจฐเจตเจฐ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจฅเฉ‹เฉœเฉเจนเจพ เจœเจฟเจนเจพ เจกเฉ‡เจŸเจพ เจฌเจฆเจฒเจฆเจพ/เจœเฉ‹เฉœเจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจ‡เฉฑเจฅเฉ‡ เจธเจ•เจฟเฉฐเจŸเจพเจ‚ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเฉ€เจฎเจพ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจเจพ เจธเจฎเจเจฆเจพเจฐเฉ€ เจฐเฉฑเจ–เจฆเจพ เจนเฉˆ, เจœเจฟเจธ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจ†เจฐเจ•เจพเจˆเจตเจฟเฉฐเจ— เจ•เจฎเจพเจ‚เจก เจจเฉ‚เฉฐ เจœเจผเจฌเจฐเจฆเจธเจคเฉ€ เจฌเฉเจฒเจพเจ‡เจ† เจœเจพเจตเฉ‡เจ—เจพ (เจฎเฉˆเจ‚ เจนเจฐ เจธเจ•เจฟเฉฐเจŸ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจจเฉ‚เฉฐ เจคเฉ€เจฌเจฐเจคเจพ เจจเจพเจฒ เจฒเจฟเจ–เจฆเจพ เจนเจพเจ‚, เจ‡เจธเจฒเจˆ เจฎเฉˆเจ‚ เจ‡เจธ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจจเฉ‚เฉฐ เจ‰เจคเจชเจพเจฆเจจ เจตเจฟเฉฑเจš เจธเฉˆเจŸ เจจเจพ เจ•เจฐเจจ เจฆเจพ เจซเฉˆเจธเจฒเจพ เจ•เฉ€เจคเจพ);
  • เจฐเฉ€เจธเจŸเฉ‹เจฐ_เจ•เจฎเจพเจ‚เจก - เจฌเฉˆเจ•เจ…เฉฑเจช เจคเฉ‹เจ‚ WAL เจฒเฉŒเจ— เจจเฉ‚เฉฐ เจฐเฉ€เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจฒเจˆ เจ•เจฎเจพเจ‚เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€ เจœเจพเจตเฉ‡เจ—เฉ€ เจœเฉ‡เจ•เจฐ "เจชเฉ‚เจฐเจพ เจฌเฉˆเจ•เจ…เฉฑเจช" (เจฌเฉ‡เจธ เจฌเฉˆเจ•เจ…เฉฑเจช) เจกเจพเจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจจเจตเฉ€เจจเจคเจฎ เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจฆเฉ€ เจ˜เจพเจŸ เจนเฉˆเฅค

เจคเฉเจธเฉ€เจ‚ เจ…เจงเจฟเจ•เจพเจฐเจค เจฆเจธเจคเจพเจตเฉ‡เจœเจผเจพเจ‚ เจฆเฉ‡ เจ…เจจเฉเจตเจพเจฆ เจตเจฟเฉฑเจš เจ‡เจนเจจเจพเจ‚ เจธเจพเจฐเฉ‡ เจฎเจพเจชเจฆเฉฐเจกเจพเจ‚ เจฌเจพเจฐเฉ‡ เจนเฉ‹เจฐ เจชเฉœเฉเจน เจธเจ•เจฆเฉ‡ เจนเฉ‹: https://postgrespro.ru/docs/postgresql/12/runtime-config-wal.

เจ‡เฉฑเจ• เจฌเฉˆเจ•เจ…เฉฑเจช เจธเจฎเจพเจ‚-เจธเจพเจฐเจฃเฉ€ เจธเฉˆเจŸ เจ…เจช เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ

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

#!/bin/bash

su - postgres -c '/usr/local/bin/wal-g backup-push /var/lib/postgresql/12/main'

เจฒเจพเจ‚เจš เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸเจธ เจกเฉ‡เจŸเจพ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจฆเฉ‡ เจฎเจพเจฐเจ— เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจ‚เจฆเฉ‡ เจนเจจ - เจฎเฉˆเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฏเจพเจฆ เจฆเจฟเจตเจพเจ‰เจ‚เจฆเจพ เจนเจพเจ‚ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจšเจฒเจพ เจ•เฉ‡ เจฒเฉฑเจญ เจธเจ•เจฆเฉ‡ เจนเฉ‹ pg_lscluster.

เจœเฉ‡ เจธเจญ เจ•เฉเจ เจ—เจฒเจคเฉ€เจ†เจ‚ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚ เจนเฉ‹ เจ—เจฟเจ† เจ…เจคเฉ‡ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ S3 เจธเจŸเฉ‹เจฐเฉ‡เจœ เจตเจฟเฉฑเจš เจฒเฉ‹เจก เจ•เฉ€เจคเจพ เจ—เจฟเจ†, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจซเจฟเจฐ เจ•เฉเจฐเฉ‹เจจเจŸเฉˆเจฌ เจตเจฟเฉฑเจš เจธเจฎเฉ‡เจ‚-เจธเจฎเฉ‡เจ‚ เจคเฉ‡ เจฒเจพเจ‚เจš เจจเฉ‚เฉฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

#!/bin/bash

echo "15 4 * * *    /usr/local/bin/wal-g backup-push /var/lib/postgresql/12/main >> /var/log/postgresql/walg_backup.log 2>&1" >> /var/spool/cron/crontabs/postgres
# ะทะฐะดะฐะตะผ ะฒะปะฐะดะตะปัŒั†ะฐ ะธ ะฒั‹ัั‚ะฐะฒะปัะตะผ ะฟั€ะฐะฒะธะปัŒะฝั‹ะต ะฟั€ะฐะฒะฐ ั„ะฐะนะปัƒ
chown postgres: /var/spool/cron/crontabs/postgres
chmod 600 /var/spool/cron/crontabs/postgres

เจ‡เจธ เจ‰เจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจš, เจฌเฉˆเจ•เจ…เฉฑเจช เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจนเจฐ เจฐเฉ‹เจœเจผ เจธเจตเฉ‡เจฐเฉ‡ 4:15 เจตเจœเฉ‡ เจธเจผเฉเจฐเฉ‚ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค

เจชเฉเจฐเจพเจฃเฉ‡ เจฌเฉˆเจ•เจ…เฉฑเจช เจฎเจฟเจŸเจพเจ เจœเจพ เจฐเจนเฉ‡ เจนเจจ

เจœเจผเจฟเจ†เจฆเจพเจคเจฐ เจธเฉฐเจญเจพเจตเจจเจพ เจนเฉˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฎเฉ‡เจธเฉ‹เจœเจผเฉ‹เจ‡เจ• เจฏเฉเฉฑเจ— เจคเฉ‹เจ‚ เจฌเจฟเจฒเจ•เฉเจฒ เจธเจพเจฐเฉ‡ เจฌเฉˆเจ•เจ…เฉฑเจช เจฐเฉฑเจ–เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจ‡เจธเจฒเจˆ เจธเจฎเฉ‡เจ‚-เจธเจฎเฉ‡เจ‚ 'เจคเฉ‡ เจคเฉเจนเจพเจกเฉ€ เจธเจŸเฉ‹เจฐเฉ‡เจœ ("เจชเฉ‚เจฐเฉ‡ เจฌเฉˆเจ•เจ…เฉฑเจช" เจ…เจคเฉ‡ WAL เจฒเฉŒเจ—เจธ) เจจเฉ‚เฉฐ "เจธเจซเจพเจˆ" เจ•เจฐเจจเจพ เจฒเจพเจญเจฆเจพเจ‡เจ• เจนเฉ‹เจตเฉ‡เจ—เจพเฅค เจ…เจธเฉ€เจ‚ เจ‡เจน เจธเจญ เจ‡เฉฑเจ• เจ•เฉเจฐเฉ‹เจจ เจŸเจพเจธเจ• เจฆเฉเจ†เจฐเจพ เจ•เจฐเจพเจ‚เจ—เฉ‡:

#!/bin/bash

echo "30 6 * * *    /usr/local/bin/wal-g delete before FIND_FULL $(date -d '-10 days' '+%FT%TZ') --confirm >> /var/log/postgresql/walg_delete.log 2>&1" >> /var/spool/cron/crontabs/postgres
# ะตั‰ั‘ ั€ะฐะท ะทะฐะดะฐะตะผ ะฒะปะฐะดะตะปัŒั†ะฐ ะธ ะฒั‹ัั‚ะฐะฒะปัะตะผ ะฟั€ะฐะฒะธะปัŒะฝั‹ะต ะฟั€ะฐะฒะฐ ั„ะฐะนะปัƒ (ั…ะพั‚ัŒ ัั‚ะพ ะพะฑั‹ั‡ะฝะพ ัั‚ะพ ะธ ะฝะต ะฝัƒะถะฝะพ ะฟะพะฒั‚ะพั€ะฝะพ ะดะตะปะฐั‚ัŒ)
chown postgres: /var/spool/cron/crontabs/postgres
chmod 600 /var/spool/cron/crontabs/postgres

เจ•เฉเจฐเฉ‹เจจ เจ‡เจธ เจ•เฉฐเจฎ เจจเฉ‚เฉฐ เจนเจฐ เจฐเฉ‹เจœเจผ เจธเจตเฉ‡เจฐเฉ‡ 6:30 เจตเจœเฉ‡ เจšเจฒเจพเจเจ—เจพ, เจชเจฟเจ›เจฒเฉ‡ 10 เจฆเจฟเจจเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจ•เจพเจชเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจ›เฉฑเจก เจ•เฉ‡ เจธเจญ เจ•เฉเจ (เจชเฉ‚เจฐเจพ เจฌเฉˆเจ•เจ…เฉฑเจช, เจกเฉˆเจฒเจŸเจพ เจ…เจคเฉ‡ WAL) เจฎเจฟเจŸเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ, เจชเจฐ เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจ‡เฉฑเจ• เจฌเฉˆเจ•เจ…เฉฑเจช เจ›เฉฑเจกเจฆเจพ เจนเฉˆเฅค เจจเฉ‚เฉฐ เจจเจฟเจฐเจงเจพเจฐเจค เจฎเจฟเจคเฉ€ เจคเจพเจ‚ เจ•เจฟ เจ•เฉ‹เจˆ เจตเฉ€ เจฌเจฟเฉฐเจฆเฉ‚ ะฟะพัะปะต เจฎเจฟเจคเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ PITR เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€เฅค

เจฌเฉˆเจ•เจ…เฉฑเจช เจคเฉ‹เจ‚ เจฐเฉ€เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเจพ เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆ

เจ‡เจน เจ•เฉ‹เจˆ เจญเฉ‡เจค เจจเจนเฉ€เจ‚ เจนเฉˆ เจ•เจฟ เจ‡เฉฑเจ• เจธเจฟเจนเจคเจฎเฉฐเจฆ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฆเฉ€ เจ•เฉเฉฐเจœเฉ€ เจธเจฎเฉ‡เจ‚-เจธเจฎเฉ‡เจ‚ 'เจคเฉ‡ เจฌเจนเจพเจฒเฉ€ เจ…เจคเฉ‡ เจ…เฉฐเจฆเจฐเจฒเฉ‡ เจกเฉ‡เจŸเจพ เจฆเฉ€ เจ‡เจ•เจธเจพเจฐเจคเจพ เจฆเฉ€ เจคเจธเจฆเฉ€เจ• เจนเฉˆ. เจฎเฉˆเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจธ เจญเจพเจ— เจตเจฟเฉฑเจš WAL-G เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจฎเฉเฉœ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฆเฉ‡ เจคเจฐเฉ€เจ•เฉ‡ เจฌเจพเจฐเฉ‡ เจฆเฉฑเจธเจพเจ‚เจ—เจพ, เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจฌเจพเจ…เจฆ เจตเจฟเฉฑเจš เจœเจพเจ‚เจšเจพเจ‚ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค

เจ‡เจน เจตเฉฑเจ–เจฐเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจงเจฟเจ†เจจ เจฆเฉ‡เจฃ เจฏเฉ‹เจ— เจนเฉˆ เจœเฉ‹ เจ•เจฟ เจ‡เฉฑเจ• เจŸเฉˆเจธเจŸ เจตเจพเจคเจพเจตเจฐเจจ เจตเจฟเฉฑเจš เจฌเจนเจพเจฒ เจ•เจฐเจจ เจฒเจˆ (เจนเจฐ เจšเฉ€เจœเจผ เจœเฉ‹ เจ‰เจคเจชเจพเจฆเจจ เจจเจนเฉ€เจ‚ เจนเฉˆ) เจคเฉเจนเจพเจจเฉ‚เฉฐ S3 เจตเจฟเฉฑเจš เจธเจฟเจฐเจซเจผ เจฐเฉ€เจก เจ“เจจเจฒเฉ€ เจ–เจพเจคเฉ‡ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ เจคเจพเจ‚ เจœเฉ‹ เจ—เจฒเจคเฉ€ เจจเจพเจฒ เจฌเฉˆเจ•เจ…เฉฑเจช เจจเฉ‚เฉฐ เจ“เจตเจฐเจฐเจพเจˆเจŸ เจจเจพ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เฉ‡เฅค WAL-G เจฆเฉ‡ เจฎเจพเจฎเจฒเฉ‡ เจตเจฟเฉฑเจš, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ—เจฐเฉเฉฑเจช เจชเจพเจฒเจฟเจธเฉ€ เจตเจฟเฉฑเจš S3 เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฒเจˆ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจ…เจงเจฟเจ•เจพเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจธเฉˆเฉฑเจŸ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ (เจชเฉเจฐเจญเจพเจต: เจ†เจ—เจฟเจ† เจฆเจฟเจ“): s3: GetObject, s3:ListBucket, s3:GetBucketLocation. เจ…เจคเฉ‡, เจฌเฉ‡เจธเจผเจ•, เจธเฉˆเฉฑเจŸ เจ•เจฐเจจเจพ เจจเจพ เจญเฉเฉฑเจฒเฉ‹ archive_mode=off เจธเฉˆเจŸเจฟเฉฐเจ—เจœเจผ เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš postgresql.conf, เจคเจพเจ‚ เจœเฉ‹ เจคเฉเจนเจพเจกเจพ เจŸเฉˆเจธเจŸ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจšเฉเฉฑเจชเจšเจพเจช เจฌเฉˆเจ•เจ…เฉฑเจช เจจเจนเฉ€เจ‚ เจฒเฉˆเจฃเจพ เจšเจพเจนเฉเฉฐเจฆเจพเฅค

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

#!/bin/bash

# ะตัะปะธ ะตัั‚ัŒ ะฑะฐะปะฐะฝัะธั€ะพะฒั‰ะธะบ ะฟะพะดะบะปัŽั‡ะตะฝะธะน (ะฝะฐะฟั€ะธะผะตั€, pgbouncer), ั‚ะพ ะฒะฝะฐั‡ะฐะปะต ะพั‚ะบะปัŽั‡ะฐะตะผ ะตะณะพ, ั‡ั‚ะพะฑั‹ ะพะฝ ะฝะต ะฝะฐั€ั‹ะณะฐะป ะพัˆะธะฑะพะบ ะฒ ะปะพะณ
service pgbouncer stop
# ะตัะปะธ ะตัั‚ัŒ ะดะตะผะพะฝ, ะบะพั‚ะพั€ั‹ะน ะฟะตั€ะตะทะฐะฟัƒัะบะฐะตั‚ ัƒะฟะฐะฒัˆะธะต ะฟั€ะพั†ะตััั‹ (ะฝะฐะฟั€ะธะผะตั€, monit), ั‚ะพ ะพัั‚ะฐะฝะฐะฒะปะธะฒะฐะตะผ ะฒ ะฝั‘ะผ ะฟั€ะพั†ะตัั ะผะพะฝะธั‚ะพั€ะธะฝะณะฐ ะฑะฐะทั‹ (ัƒ ะผะตะฝั ัั‚ะพ pgsql12)
monit stop pgsql12
# ะธะปะธ ะพัั‚ะฐะฝะฐะฒะปะธะฒะฐะตะผ ะผะพะฝะธั‚ะพั€ะธะฝะณ ะฟะพะปะฝะพัั‚ัŒัŽ
service monit stop
# ะพัั‚ะฐะฝะฐะฒะปะธะฒะฐะตะผ ัะฐะผัƒ ะฑะฐะทัƒ ะดะฐะฝะฝั‹ั…
service postgresql stop
# ัƒะดะฐะปัะตะผ ะฒัะต ะดะฐะฝะฝั‹ะต ะธะท ั‚ะตะบัƒั‰ะตะน ะฑะฐะทั‹ (!!!); ะปัƒั‡ัˆะต ะฟั€ะตะดะฒะฐั€ะธั‚ะตะปัŒะฝะพ ัะดะตะปะฐั‚ัŒ ะธั… ะบะพะฟะธัŽ, ะตัะปะธ ะตัั‚ัŒ ัะฒะพะฑะพะดะฝะพะต ะผะตัั‚ะพ ะฝะฐ ะดะธัะบะต
rm -rf /var/lib/postgresql/12/main
# ัะบะฐั‡ะธะฒะฐะตะผ ั€ะตะทะตั€ะฒะฝัƒัŽ ะบะพะฟะธัŽ ะธ ั€ะฐะทะฐั€ั…ะธะฒะธั€ัƒะตะผ ะตั‘
su - postgres -c '/usr/local/bin/wal-g backup-fetch /var/lib/postgresql/12/main LATEST'
# ะฟะพะผะตั‰ะฐะตะผ ั€ัะดะพะผ ั ะฑะฐะทะพะน ัะฟะตั†ะธะฐะปัŒะฝั‹ะน ั„ะฐะนะป-ัะธะณะฝะฐะป ะดะปั ะฒะพััั‚ะฐะฝะพะฒะปะตะฝะธั (ัะผ. https://postgrespro.ru/docs/postgresql/12/runtime-config-wal#RUNTIME-CONFIG-WAL-ARCHIVE-RECOVERY ), ะพะฝ ะพะฑัะทะฐั‚ะตะปัŒะฝะพ ะดะพะปะถะตะฝ ะฑั‹ั‚ัŒ ัะพะทะดะฐะฝ ะพั‚ ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั postgres
su - postgres -c 'touch /var/lib/postgresql/12/main/recovery.signal'
# ะทะฐะฟัƒัะบะฐะตะผ ะฑะฐะทัƒ ะดะฐะฝะฝั‹ั…, ั‡ั‚ะพะฑั‹ ะพะฝะฐ ะธะฝะธั†ะธะธั€ะพะฒะฐะปะฐ ะฟั€ะพั†ะตัั ะฒะพััั‚ะฐะฝะพะฒะปะตะฝะธั
service postgresql start

เจ‰เจนเจจเจพเจ‚ เจฒเจˆ เจœเฉ‹ เจฐเจฟเจ•เจตเจฐเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจจ, เจนเฉ‡เจ เจพเจ‚ เจฌเฉˆเจธเจผ เจฎเฉˆเจœเจฟเจ• เจฆเจพ เจ‡เฉฑเจ• เจ›เฉ‹เจŸเจพ เจœเจฟเจนเจพ เจŸเฉเจ•เฉœเจพ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ, เจคเจพเจ‚ เจœเฉ‹ เจฐเจฟเจ•เจตเจฐเฉ€ เจตเจฟเฉฑเจš เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจนเฉ‹เจฃ เจฆเฉ€ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš, เจธเจ•เฉเจฐเจฟเจชเจŸ เจ‡เฉฑเจ• เจ—เฉˆเจฐ-เจœเจผเฉ€เจฐเฉ‹ เจเจ—เจœเจผเจฟเจŸ เจ•เฉ‹เจก เจจเจพเจฒ เจ•เฉเจฐเฉˆเจธเจผ เจนเฉ‹ เจœเจพเจตเฉ‡เจ—เฉ€เฅค เจ‡เจธ เจ‰เจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจš, เจ‡เจน เจชเจคเจพ เจฒเจ—เจพเจ‰เจฃ เจฒเจˆ เจ•เจฟ เจ•เฉ€ เจธเจฟเจ—เจจเจฒ เจซเจพเจˆเจฒ เจฎเจฟเจŸเจพเจˆ เจ—เจˆ เจธเฉ€ (เจ‡เจธเจฆเจพ เจฎเจคเจฒเจฌ เจ‡เจน เจนเฉ‹เจตเฉ‡เจ—เจพ เจ•เจฟ เจฐเจฟเจ•เจตเจฐเฉ€ เจธเจซเจฒ เจฐเจนเฉ€ เจธเฉ€) 120 เจธเจ•เจฟเฉฐเจŸเจพเจ‚ (เจฐเจฟเจ•เจตเจฐเฉ€ เจฒเจˆ เจ•เฉเฉฑเจฒ 5 เจฎเจฟเฉฐเจŸ) เจฆเฉ€ เจฎเจฟเจ†เจฆ เจฆเฉ‡ เจจเจพเจฒ 10 เจœเจพเจ‚เจšเจพเจ‚ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจœเจพเจ‚เจฆเฉ€เจ†เจ‚ เจนเจจ:

#!/bin/bash

CHECK_RECOVERY_SIGNAL_ITER=0
while [ ${CHECK_RECOVERY_SIGNAL_ITER} -le 120 ]
do
    if [ ! -f "/var/lib/postgresql/12/main/recovery.signal" ]
    then
        echo "recovery.signal removed"
        break
    fi
    sleep 5
    ((CHECK_RECOVERY_SIGNAL_ITER+1))
done

# ะตัะปะธ ะฟะพัะปะต ะฒัะตั… ะฟั€ะพะฒะตั€ะพะบ ั„ะฐะนะป ะฒัั‘ ั€ะฐะฒะฝะพ ััƒั‰ะตัั‚ะฒัƒะตั‚, ั‚ะพ ะฟะฐะดะฐะตะผ ั ะพัˆะธะฑะบะพะน
if [ -f "/var/lib/postgresql/12/main/recovery.signal" ]
then
    echo "recovery.signal still exists!"
    exit 17
fi

เจธเจซเจฒ เจฐเจฟเจ•เจตเจฐเฉ€ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจธเจพเจฐเฉ€เจ†เจ‚ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ เจจเฉ‚เฉฐ เจตเจพเจชเจธ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจเจพ เจจเจพ เจญเฉเฉฑเจฒเฉ‹ (pgbouncer/monit, เจ†เจฆเจฟ)เฅค

เจฐเจฟเจ•เจตเจฐเฉ€ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจกเฉ‡เจŸเจพ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจœเจพ เจฐเจนเฉ€ เจนเฉˆ

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

เจกเฉ‡เจŸเจพ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ, เจ‡เจธเจจเฉ‚เฉฐ เจกเฉฐเจช เจฆเฉเจ†เจฐเจพ เจšเจฒเจพเจ‰เจฃเจพ เจ•เจพเจซเจผเฉ€ เจนเฉˆ, เจชเจฐ เจ‡เจน เจฌเจฟเจนเจคเจฐ เจนเฉˆ เจ•เจฟ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจคเฉเจนเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจšเฉˆเฉฑเจ•เจธเจฎ เจธเจฎเจฐเจฅเจฟเจค เจนเจจ (เจกเจพเจŸเจพ เจšเฉˆเฉฑเจ•เจธเจฎ):

#!/bin/bash

if ! su - postgres -c 'pg_dumpall > /dev/null'
then
    echo 'pg_dumpall failed'
    exit 125
fi

เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ - เจฎเฉŒเจœเฉ‚เจฆ เจนเฉˆ amcheck เจฎเฉ‹เจกเฉ€เจŠเจฒ, เจ†เจ“ เจ‡เจธเจฆเฉ‡ เจฒเจˆ sql เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจฒเจˆเจ WAL-G เจŸเฉˆเจธเจŸ เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ‡ เจ†เจฒเฉ‡ เจฆเฉเจ†เจฒเฉ‡ เจฅเฉ‹เฉœเจพ เจœเจฟเจนเจพ เจคเจฐเจ• เจฌเจฃเจพเจ“:

#!/bin/bash

# ะดะพะฑะฐะฒะปัะตะผ sql-ะทะฐะฟั€ะพั ะดะปั ะฟั€ะพะฒะตั€ะบะธ ะฒ ั„ะฐะนะป ะฒะพ ะฒั€ะตะผะตะฝะฝะพะน ะดะธั€ะตะบั‚ะพั€ะธะธ
cat > /tmp/amcheck.sql << EOF
CREATE EXTENSION IF NOT EXISTS amcheck;
SELECT bt_index_check(c.oid), c.relname, c.relpages
FROM pg_index i
JOIN pg_opclass op ON i.indclass[0] = op.oid
JOIN pg_am am ON op.opcmethod = am.oid
JOIN pg_class c ON i.indexrelid = c.oid
JOIN pg_namespace n ON c.relnamespace = n.oid
WHERE am.amname = 'btree'
AND c.relpersistence != 't'
AND i.indisready AND i.indisvalid;
EOF
chown postgres: /tmp/amcheck.sql

# ะดะพะฑะฐะฒะปัะตะผ ัะบั€ะธะฟั‚ ะดะปั ะทะฐะฟัƒัะบะฐ ะฟั€ะพะฒะตั€ะพะบ ะฒัะตั… ะดะพัั‚ัƒะฟะฝั‹ั… ะฑะฐะท ะฒ ะบะปะฐัั‚ะตั€ะต
# (ะพะฑั€ะฐั‚ะธั‚ะต ะฒะฝะธะผะฐะฝะธะต ั‡ั‚ะพ ะฟะตั€ะตะผะตะฝะฝั‹ะต ะธ ะทะฐะฟัƒัะบ ะบะพะผะฐะฝะด โ€“ ัะบั€ะฐะฝะธั€ะพะฒะฐะฝั‹)
cat > /tmp/run_amcheck.sh << EOF
for DBNAME in $(su - postgres -c 'psql -q -A -t -c "SELECT datname FROM pg_database WHERE datistemplate = false;" ')
do
    echo "Database: ${DBNAME}"
    su - postgres -c "psql -f /tmp/amcheck.sql -v 'ON_ERROR_STOP=1' ${DBNAME}" && EXIT_STATUS=$? || EXIT_STATUS=$?
    if [ "${EXIT_STATUS}" -ne 0 ]
    then
        echo "amcheck failed on DB: ${DBNAME}"
        exit 125
    fi
done
EOF
chmod +x /tmp/run_amcheck.sh

# ะทะฐะฟัƒัะบะฐะตะผ ัะบั€ะธะฟั‚
/tmp/run_amcheck.sh > /tmp/amcheck.log

# ะดะปั ะฟั€ะพะฒะตั€ะบะธ ั‡ั‚ะพ ะฒัั‘ ะฟั€ะพัˆะปะพ ัƒัะฟะตัˆะฝะพ ะผะพะถะฝะพ ะฟั€ะพะฒะตั€ะธั‚ัŒ exit code ะธะปะธ grepโ€™ะฝัƒั‚ัŒ ะพัˆะธะฑะบัƒ
if grep 'amcheck failed' "/tmp/amcheck.log"
then
    echo 'amcheck failed: '
    cat /tmp/amcheck.log
    exit 125
fi

เจธเฉฐเจ–เฉ‡เจช เจ•เจฐเจจ เจฒเจˆ

เจฎเฉˆเจ‚ เจชเฉเจฐเจ•เจพเจธเจผเจจ เจจเฉ‚เฉฐ เจคเจฟเจ†เจฐ เจ•เจฐเจจ เจตเจฟเฉฑเจš เจฎเจฆเจฆ เจฒเจˆ เจเจ‚เจกเจฐเฉ€ เจฌเฉ‹เจฐเฉ‹เจกเจฟเจจ เจฆเจพ เจงเฉฐเจจเจตเจพเจฆ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจ‚ เจ…เจคเฉ‡ WAL-G เจฆเฉ‡ เจตเจฟเจ•เจพเจธ เจตเจฟเฉฑเจš เจ‰เจธเจฆเฉ‡ เจฏเฉ‹เจ—เจฆเจพเจจ เจฒเจˆ เจตเจฟเจธเจผเฉ‡เจธเจผ เจงเฉฐเจจเจตเจพเจฆ!

เจ‡เจน เจ‡เจธ เจจเฉ‹เจŸ เจจเฉ‚เฉฐ เจธเจฎเจพเจชเจค เจ•เจฐเจฆเจพ เจนเฉˆ. เจฎเฉˆเจจเฉ‚เฉฐ เจ‰เจฎเฉ€เจฆ เจนเฉˆ เจ•เจฟ เจฎเฉˆเจ‚ เจธเฉˆเฉฑเจŸเจ…เฉฑเจช เจฆเฉ€ เจธเฉŒเจ– เจ…เจคเฉ‡ เจคเฉเจนเจพเจกเฉ€ เจ•เฉฐเจชเจจเฉ€ เจตเจฟเฉฑเจš เจ‡เจธ เจŸเฉ‚เจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€ เจตเฉฑเจกเฉ€ เจธเฉฐเจญเจพเจตเจจเจพ เจจเฉ‚เฉฐ เจฆเฉฑเจธเจฃ เจฆเฉ‡ เจฏเฉ‹เจ— เจธเฉ€เฅค เจฎเฉˆเจ‚ WAL-G เจฌเจพเจฐเฉ‡ เจฌเจนเฉเจค เจ•เฉเจ เจธเฉเจฃเจฟเจ† เจนเฉˆ, เจชเจฐ เจ•เจฆเฉ‡ เจตเฉ€ เจฌเฉˆเจ เจฃ เจ…เจคเฉ‡ เจ‡เจธเจฆเจพ เจชเจคเจพ เจฒเจ—เจพเจ‰เจฃ เจฒเจˆ เจ‡เฉฐเจจเจพ เจธเจฎเจพเจ‚ เจจเจนเฉ€เจ‚ เจธเฉ€. เจ…เจคเฉ‡ เจฎเฉˆเจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจ˜เจฐ เจตเจฟเฉฑเจš เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ‡เจน เจฒเฉ‡เจ– เจฎเฉ‡เจฐเฉ‡ เจคเฉ‹เจ‚ เจฌเจพเจนเจฐ เจ†เจ‡เจ†.

เจตเฉฑเจ–เจฐเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡, เจ‡เจน เจงเจฟเจ†เจจ เจฆเฉ‡เจฃ เจฏเฉ‹เจ— เจนเฉˆ เจ•เจฟ WAL-G เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ DBMS เจจเจพเจฒ เจตเฉ€ เจ•เฉฐเจฎ เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆ:

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

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