فصل ۷: مدیریت، امنیت و دسترس‌پذیری

بکاپ منطقی: pg_dump -Fc، pg_restore -j و pg_dumpall --globals-only

بکاپی که بازگردانی‌اش را تمرین نکرده‌اید، بکاپ نیست

pg_dump از یک دیتابیس در یک snapshot سازگار خروجی منطقی (دستورهای SQL یا معادل فشرده‌اش) می‌گیرد، بدون توقف و بدون قفل کردن نوشتن. برای دیتابیس‌های تا چند ده گیگابایت و برای انتقال بین نسخه‌ها و سرورها، ابزار اصلی همین است.

قالبگزینهویژگی
plain-Fpفایل SQL متنی؛ با psql بازگردانی می‌شود، انتخابی بازگرداندن سخت است
custom-Fcفشرده، بازگردانی انتخابی و موازی با pg_restore؛ انتخاب پیش‌فرض
directory-Fdیک فایل برای هر جدول؛ تنها قالبی که dump موازی (-j) دارد
tar-Ftکاربرد کم؛ بدون فشرده‌سازی و بازگردانی موازی
# بکاپ روزانه با تاریخ
pg_dump -h localhost -U migrator -d carpet -Fc -Z 6 \
  -f /backup/carpet_$(date +%F).dump

# roleها، رمزها و tablespaceها در pg_dump نیستند!
pg_dumpall -h localhost -U postgres --globals-only -f /backup/globals_$(date +%F).sql

# دیتابیس بزرگ: dump موازی با ۴ پروسه
pg_dump -d carpet -Fd -j 4 -f /backup/carpet_dir

بازگردانی

# ۱) roleها روی سرور جدید
psql -U postgres -f /backup/globals_2026-03-10.sql

# ۲) دیتابیس خالی و بازگردانی موازی
createdb -U postgres -O carpet_owner carpet
pg_restore -U postgres -d carpet -j 4 --exit-on-error /backup/carpet_2026-03-10.dump

# فقط یک جدول را از بکاپ برگردانید
pg_restore -d carpet_tmp -t orders /backup/carpet_2026-03-10.dump

# فهرست محتوا، ویرایش و بازگردانی گزینشی
pg_restore -l carpet.dump > toc.list
pg_restore -d carpet -L toc.list carpet.dump

اگر روی سرور مقصد roleهای مبدأ وجود ندارند (مثلاً بازگردانی روی لپ‌تاپ)، --no-owner --no-privileges اشیا را به کاربر بازگرداننده می‌دهد و خطاهای GRANT را حذف می‌کند.

آزمودن بکاپ

pg_restore -l /backup/carpet_$(date +%F).dump > /dev/null && echo "فایل سالم است"
# بهتر: بازگردانی کامل هفتگی روی سرور تست و مقایسه‌ی تعداد ردیف‌ها

نکته‌هایی که کمتر کسی می‌داند

  • همیشه با pg_dump نسخه‌ی جدیدتر (برابر نسخه‌ی مقصد) dump بگیرید؛ pg_dump 17 از سرور 12 بکاپ می‌گیرد، اما pg_dump 12 از سرور 17 امتناع می‌کند.
  • -j در pg_restore با --single-transaction (یا ‎-1) سازگار نیست؛ یا موازی، یا اتمی.
  • بیشتر زمان restore صرف ساخت ایندکس‌ها و قیدهای FK می‌شود؛ maintenance_work_mem بزرگ در سرور مقصد آن را چند برابر سریع‌تر می‌کند.
  • در نسخه‌های 16 و 17، pg_dump آمار برنامه‌ریز را منتقل نمی‌کند؛ بلافاصله بعد از restore یک ANALYZE (یا vacuumdb --analyze-in-stages) بزنید، وگرنه ساعت اول همه‌ی کوئری‌ها پلن بد دارند.
  • با --exclude-table-data='factory.loom_sensor_log*' ساختار جدول‌های لاگ حجیم را نگه می‌دارید اما داده‌شان را نه؛ بکاپ روزانه چند برابر کوچک‌تر می‌شود.

برای ذخیره‌ی پیشرفت و شرکت در آزمون، وارد شوید — رایگان است.