WAL-G: PostgreSQL DBMS-เดจเตเดฑเต† เดฌเดพเด•เตเด•เดชเตเดชเตเด•เดณเตเด‚ เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เดฒเตเด‚

SQL เดกเด‚เดชเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดฌเดพเด•เตเด•เดชเตเดชเตเด•เตพ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเต เดตเดณเดฐเต†เด•เตเด•เดพเดฒเดฎเดพเดฏเดฟ เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเต (เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต pg_dump เด…เดฅเดตเดพ pg_dumpall) เดจเดฒเตเดฒ เด†เดถเดฏเดฎเดฒเตเดฒ. PostgreSQL DBMS เดฌเดพเด•เตเด•เดชเตเดชเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดพเดฃเต เดจเดฒเตเดฒเดคเต pg_basebackup, เด‡เดคเต WAL เดฒเต‹เด—เตเด•เดณเตเดŸเต† เดฌเตˆเดจเดฑเดฟ เดชเด•เตผเดชเตเดชเต เด‰เดฃเตเดŸเดพเด•เตเด•เตเดจเตเดจเต. เดŽเดจเตเดจเดพเตฝ เด’เดฐเต เดชเด•เตผเดชเตเดชเต เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดชเตเดจเดƒเดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เดฎเตเดดเตเดตเตป เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเตเด‚ เดจเดฟเด™เตเด™เตพ เดชเด เดฟเด•เตเด•เดพเตป เดคเตเดŸเด™เตเด™เตเดฎเตเดชเต‹เตพ, เด‡เดคเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด•เตเดฑเดžเตเดžเดคเต เดฐเดฃเตเดŸเต เดŸเตเดฐเตˆเดธเตˆเด•เตเด•เดฟเดณเตเด•เดณเต†เด™เตเด•เดฟเดฒเตเด‚ เดŽเดดเตเดคเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต†เดจเตเดจเตเด‚ เดฎเตเด•เดณเดฟเดฒเตเด‚ เดคเดพเดดเต†เดฏเตเด‚ เดตเต‡เดฆเดจ เด‰เดฃเตเดŸเดพเด•เตเด•เดฐเตเดคเต†เดจเตเดจเตเด‚ เดจเดฟเด™เตเด™เตพ เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เตเด‚. เด•เดทเตเดŸเดชเตเดชเดพเดŸเตเด•เตพ เดฒเด˜เต‚เด•เดฐเดฟเด•เตเด•เดพเตป, WAL-G เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเดšเตเดšเต†เดŸเตเดคเตเดคเต.

WAL-G PostgreSQL เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเด•เตพ เดฌเดพเด•เตเด•เดชเตเดชเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด‚ เดชเตเดจเดƒเดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฎเดพเดฏเดฟ Go-เดฏเดฟเตฝ เดŽเดดเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดŸเต‚เตพ เด†เดฃเต (เด•เต‚เดŸเดพเดคเต† เด…เดŸเตเดคเตเดคเดฟเดŸเต† MySQL/MariaDB, MongoDB, FoundationDB เดŽเดจเตเดจเดฟเดตเดฏเตเด‚). เด†เดฎเดธเต‹เตบ เดŽเดธเต 3 เดธเตเดฑเตเดฑเต‹เดฑเต‡เดœเต (เด’เดชเตเดชเด‚ เด…เดจเดฒเต‹เด—เตเด•เตพ, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดฏเดพเตปเดกเต†เด•เตเดธเต เด’เดฌเตโ€Œเดœเด•เตเดฑเตเดฑเต เดธเตเดฑเตเดฑเต‹เดฑเต‡เดœเต), เด—เต‚เด—เดฟเตพ เด•เตเดฒเต—เดกเต เดธเตเดฑเตเดฑเต‹เดฑเต‡เดœเต, เด…เดธเต‚เตผ เดธเตเดฑเตเดฑเต‹เดฑเต‡เดœเต, เดธเตเดตเดฟเดซเตเดฑเตเดฑเต เด’เดฌเตโ€Œเดœเด•เตเดฑเตเดฑเต เดธเตเดฑเตเดฑเต‹เดฑเต‡เดœเต, เด•เต‚เดŸเดพเดคเต† เดซเดฏเตฝ เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเต เด‡เดคเต เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต. เดฎเตเดดเตเดตเตป เดธเดœเตเดœเต€เด•เดฐเดฃเดตเตเด‚ เดฒเดณเดฟเดคเดฎเดพเดฏ เด˜เดŸเตเดŸเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เดพเดฃเต เดตเดฐเตเดจเตเดจเดคเต, เดŽเดจเตเดจเดพเตฝ เด‡เดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดฒเต‡เด–เดจเด™เตเด™เตพ เด‡เดจเตเดฑเตผเดจเต†เดฑเตเดฑเดฟเดฒเตเดŸเดจเต€เดณเด‚ เดšเดฟเดคเดฑเดฟเด•เตเด•เดฟเดŸเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเตฝ, เดคเตเดŸเด•เตเด•เด‚ เดฎเตเดคเตฝ เด…เดตเดธเดพเดจเด‚ เดตเดฐเต†เดฏเตเดณเตเดณ เดŽเดฒเตเดฒเดพ เด˜เดŸเตเดŸเด™เตเด™เดณเตเด‚ เด‰เตพเด•เตเด•เตŠเดณเตเดณเตเดจเตเดจ เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ เด’เดฐเต เดฎเดพเดจเตเดตเตฝ เด‡เดฒเตเดฒ (เดนเดฌเตเดฐเต†เดฏเดฟเตฝ เดจเดฟเดฐเดตเดงเดฟ เดชเต‹เดธเตเดฑเตเดฑเตเด•เตพ เด‰เดฃเตเดŸเต, เดŽเดจเตเดจเดพเตฝ เดชเดฒ เดชเต‹เดฏเดฟเดจเตเดฑเตเด•เดณเตเด‚ เด…เดตเดฟเดŸเต† เดจเดทเตโ€ŒเดŸเดฎเดพเดฏเดฟ).

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 - เดŽเดธเต 3 เดฒเต† เด†เด•เตเดธเดธเต เด•เต€ (เด’เดฐเต เดŸเต†เดธเตเดฑเตเดฑเต เดธเต†เตผเดตเดฑเดฟเตฝ เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดˆ เด•เต€เด•เตพเด•เตเด•เต เดฑเต€เดกเต เด’เตบเดฒเดฟ เดชเต‹เดณเดฟเดธเดฟ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚! เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เตฝ เดŽเดจเตเดจ เดตเดฟเดญเดพเด—เดคเตเดคเดฟเตฝ เด‡เดคเต เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดตเดฟเดตเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.);
  • AWS_SECRET_ACCESS_KEY - S3 เดธเด‚เดญเดฐเดฃเดคเตเดคเดฟเดฒเต† เดฐเดนเดธเตเดฏ เด•เต€;
  • WALG_COMPRESSION_METHOD - เด•เด‚เดชเตเดฐเดทเตป เดฐเต€เดคเดฟ, เดฌเตเดฐเต‹เดŸเตโ€Œเดฒเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดพเดฃเต เดจเดฒเตเดฒเดคเต (เด‡เดคเต เด…เดตเดธเดพเดจ เดตเดฒเตเดชเตเดชเดคเตเดคเดฟเดจเตเด‚ เด•เด‚เดชเตเดฐเดทเตป / เดกเดฟเด•เด‚เดชเตเดฐเดทเตป เดตเต‡เด—เดคเดฏเตเด•เตเด•เตเด‚ เด‡เดŸเดฏเดฟเดฒเตเดณเตเดณ เดธเตเดตเตผเดฃเตเดฃ เดถเดฐเดพเดถเดฐเดฟเดฏเดพเดฏเดคเดฟเดจเดพเตฝ);
  • WALG_DELTA_MAX_STEPS - เด’เดฐเต เดชเต‚เตผเดฃเตเดฃ เดฌเดพเด•เตเด•เดชเตเดชเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต "เดกเต†เตฝเดฑเตเดฑเด•เดณเตเดŸเต†" เดŽเดฃเตเดฃเด‚ (เด…เดต เดธเดฎเดฏเดตเตเด‚ เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดค เดกเดพเดฑเตเดฑเดฏเตเดŸเต† เดตเดฒเตเดชเตเดชเดตเตเด‚ เดฒเดพเดญเดฟเด•เตเด•เตเดจเตเดจเต, เดชเด•เตเดทเต‡ เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เตฝ เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเต† เดšเต†เดฑเตเดคเดพเดฏเดฟ เดฎเดจเตเดฆเด—เดคเดฟเดฏเดฟเดฒเดพเด•เตเด•เดพเด‚, เด…เดคเดฟเดจเดพเตฝ เดตเดฒเดฟเดฏ เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต เด‰เดšเดฟเดคเดฎเดฒเตเดฒ);
  • PGDATA - เดจเดฟเด™เตเด™เดณเตเดŸเต† เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดกเดพเดฑเตเดฑเดฏเตเดณเตเดณ เดกเดฏเดฑเด•เตเดŸเดฑเดฟเดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดชเดพเดค (เด•เดฎเดพเตปเดกเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เดฃเตเดŸเต†เดคเตเดคเดพเดจเดพเด•เตเด‚ pg_lsclusters);
  • 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 เดฒเต‹เด—เตเด•เดณเดฟเตฝ เดŽเดคเตเดฐ เดตเดฟเดตเดฐเด™เตเด™เตพ เดŽเดดเตเดคเดฃเด‚, "เดชเตเดฐเดคเดฟเดฐเต‚เดชเด‚" - เดŽเดฒเตเดฒเดพเด‚ เดŽเดดเตเดคเตเด•;
  • เด†เตผเด•เตเด•เตˆเดตเต_เดฎเต‹เดกเต - เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต WAL เดฒเต‹เด—เตเด•เตพ เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเด•เตเด•เตเด• เด†เตผเด•เตเด•เตˆเดตเต_เด•เดฎเดพเตปเดกเต;
  • เด†เตผเด•เตเด•เตˆเดตเต_เด•เดฎเดพเตปเดกเต - เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เดฟเดฏ WAL เดฒเต‹เด—เต เด†เตผเด•เตเด•เตˆเดตเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด•เดฎเดพเตปเดกเต;
  • เด†เตผเด•เตเด•เตˆเดตเต_เดŸเตˆเด‚เด”เดŸเตเดŸเต - เดฒเต‹เด—เตเด•เดณเตเดŸเต† เด†เตผเด•เตเด•เตˆเดตเดฟเด‚เด—เต เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเดฎเตเดชเต‹เตพ เดฎเดพเดคเตเดฐเดฎเต‡ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเด•เดฏเตเดณเตเดณเต‚, เดŽเดจเตเดจเดพเตฝ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเต†เตผเดตเตผ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต‡เด•เตเด•เต เด•เตเดฑเดšเตเดšเต เดกเดพเดฑเตเดฑ เดฎเดพเดฑเตเดฑเตเด•เดฏเต‹ เดšเต‡เตผเด•เตเด•เตเด•เดฏเต‹ เดšเต†เดฏเตเดฏเตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดจเดฟเดฎเดฟเดทเด™เตเด™เตพเด•เตเด•เตเดณเตเดณเดฟเตฝ เด‡เดตเดฟเดŸเต† เด’เดฐเต เดชเดฐเดฟเดงเดฟ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เด…เตผเดคเตเดฅเดฎเดพเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเดจเตเดถเต‡เดทเด‚ เด†เตผเด•เตเด•เตˆเดตเดฟเด‚เด—เต เด•เดฎเดพเตปเดกเต เดจเดฟเตผเดฌเดจเตเดงเดฟเดคเดฎเดพเดฏเดฟ เดตเดฟเดณเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเด‚ (เด“เดฐเต‹ เดธเต†เด•เตเด•เตปเดกเดฟเดฒเตเด‚ เดžเดพเตป เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต‡เด•เตเด•เต เดคเต€เดตเตเดฐเดฎเดพเดฏเดฟ เดŽเดดเตเดคเตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ เดˆ เดชเดฐเดพเดฎเต€เดฑเตเดฑเตผ เด‰เตฝเดชเตเดชเดพเดฆเดจเดคเตเดคเดฟเตฝ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดฟเดฒเตเดฒเต†เดจเตเดจเต เดžเดพเตป เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต);
  • เดฑเดฟเดธเตเดฑเตเดฑเต‹เตผ_เด•เดฎเดพเตปเดกเต - "เดชเต‚เตผเดฃเตเดฃ เดฌเดพเด•เตเด•เดชเตเดชเต" (เดฌเต‡เดธเต เดฌเดพเด•เตเด•เดชเตเดชเต) เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต† เดเดฑเตเดฑเดตเตเด‚ เดชเตเดคเดฟเดฏ เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เด‡เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เด’เดฐเต เดฌเดพเด•เตเด•เดชเตเดชเดฟเตฝ เดจเดฟเดจเตเดจเต 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_lsclusters.

เดŽเดฒเตเดฒเดพเด‚ เดชเดฟเดถเด•เตเด•เดณเดฟเดฒเตเดฒเดพเดคเต† เดชเต‹เด•เตเด•เดฏเตเด‚ เดกเดพเดฑเตเดฑ S3 เดธเตเดฑเตเดฑเต‹เดฑเต‡เดœเดฟเดฒเต‡เด•เตเด•เต เดฒเต‹เดกเตเดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเดพเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต crontab-เตฝ เด†เดจเตเด•เดพเดฒเดฟเด• เดฒเต‹เดžเตเดšเต เด•เตเดฐเดฎเต€เด•เดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚:

#!/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=เด“เดซเต เด•เตเดฐเดฎเต€เด•เดฐเดฃ เดซเดฏเดฒเดฟเตฝ 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, เดฎเตเดคเดฒเดพเดฏเดต).

เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เดฒเดฟเดจเตเดถเต‡เดทเด‚ เดกเดพเดฑเตเดฑ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต

เดชเตเดจเดƒเดธเตเดฅเดพเดชเดฟเดšเตเดšเดคเดฟเดจเต เดถเต‡เดทเด‚ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดจเตเดฑเต† เดธเดฎเด—เตเดฐเดค เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเต เด…เดคเตเดฏเดจเตเดคเดพเดชเต‡เด•เตเดทเดฟเดคเดฎเดพเดฃเต, เด…เดคเดฟเดจเดพเตฝ เดคเด•เตผเดจเตเดจ/เดตเดณเดžเตเดž เดฌเดพเด•เตเด•เดชเตเดชเต เด‰เดณเตเดณ เด’เดฐเต เดธเดพเดนเดšเดฐเตเดฏเด‚ เด‰เดฃเตเดŸเดพเด•เดฟเดฒเตเดฒ. เดธเตƒเดทเตเดŸเดฟเดšเตเดš เด“เดฐเต‹ เด†เตผเด•เตเด•เตˆเดตเดฟเดฒเตเด‚ เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดพเดฃเต เดจเดฒเตเดฒเดคเต, เดŽเดจเตเดจเดพเตฝ เดŽเดตเดฟเดŸเต†, เดŽเด™เตเด™เดจเต† เดจเดฟเด™เตเด™เดณเตเดŸเต† เดญเดพเดตเดจเดฏเต† เดฎเดพเดคเตเดฐเด‚ เด†เดถเตเดฐเดฏเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต (เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดฎเดฃเดฟเด•เตเด•เต‚เตผ เด…เดŸเดฟเดธเตเดฅเดพเดจเดคเตเดคเดฟเตฝ เดตเตเดฏเด•เตเดคเดฟเด—เดค เดธเต†เตผเดตเดฑเตเด•เตพ เด‰เดฏเตผเดคเตเดคเดพเด‚ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ CI-เดฏเดฟเตฝ เด’เดฐเต เดชเดฐเดฟเดถเต‹เดงเดจ เดจเดŸเดคเตเดคเดพเด‚). เดŽเดจเตเดจเดพเตฝ เด•เตเดฑเดžเตเดžเดคเต, เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต† เดกเดพเดฑเตเดฑเดฏเตเด‚ เดธเต‚เดšเดฟเด•เด•เดณเตเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต.

เดกเดพเดฑเตเดฑ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เด…เดคเต เด’เดฐเต เดกเด‚เดชเดฟเดฒเต‚เดŸเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดšเตเดšเดพเตฝ เดฎเดคเดฟ, เดชเด•เตเดทเต‡ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดšเต†เด•เตเด•เตเดธเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเด•เตเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดจเดฒเตเดฒเดคเดพเดฃเต (เดกเดพเดฑเตเดฑ เดšเต†เด•เตเด•เตเดธเด‚เดธเต):

#!/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

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