ریستور PostgreSQL و انتقال دیتابیس به سرور جدید
برای جابهجایی دیتابیس به سرور جدید یا بازگرداندن بکاپ، ابتدا نقشها، سپس دیتابیس و بعد دادهها را وارد میکنید. ترتیب مراحل اهمیت دارد.
۱نصب همان نسخه یا جدیدتر روی سرور مقصد
ریستور به نسخهٔ جدیدتر معمولاً بدون مشکل است، اما به نسخهٔ قدیمیتر ممکن نیست. extension هایی که دیتابیس استفاده میکند (مثل postgis) را هم نصب کنید.
sudo apt update && sudo apt install -y postgresql postgresql-contrib۲انتقال نقشها و کاربران
ابتدا فایل globals را که با pg_dumpall --globals-only ساختهاید روی مقصد اجرا کنید.
sudo -u postgres psql -f globals.sql۳ساخت دیتابیس خالی
دیتابیس را با مالک درست بسازید.
sudo -u postgres createdb -O app appdb۴ریستور فرمت custom
با -j چند رشتهٔ موازی استفاده کنید. --no-owner اگر مالکها در سرور جدید فرق دارند مشکل را حل میکند.
sudo -u postgres pg_restore -d appdb -j 4 --no-owner --role=app appdb_2026-09-29.dumpاگر دیتابیس مقصد از قبل داده دارد و --clean را اضافه کنید، اشیاء قبلی حذف میشوند.
۵ریستور فایل متنی SQL
فایلهای .sql را با psql اجرا کنید. --set ON_ERROR_STOP=1 با اولین خطا متوقف میشود تا ریستور نیمهکاره ناشناخته نماند.
zcat appdb.sql.gz | sudo -u postgres psql -v ON_ERROR_STOP=1 -d appdb۶انتقال مستقیم بین دو سرور
بدون فایل میانی، خروجی pg_dump را مستقیم به pg_restore سرور مقصد بدهید.
pg_dump -h old-server -U app -Fc appdb | pg_restore -h new-server -U app -d appdb --no-owner۷بهروزرسانی آمار و بررسی نهایی
بعد از ریستور، ANALYZE را اجرا کنید تا برنامهریز کوئری آمار درست داشته باشد و تعداد رکوردها را بررسی کنید.
sudo -u postgres psql -d appdb -c "ANALYZE;"
sudo -u postgres psql -d appdb -c "SELECT relname, n_live_tup FROM pg_stat_user_tables ORDER BY n_live_tup DESC LIMIT 10;"پرسشهای پرتکرار دربارهٔ ریستور PostgreSQL و انتقال دیتابیس به سرور جدید
خطای «role does not exist» میگیرم، چرا؟
کاربر مالک اشیاء در سرور مقصد ساخته نشده. ابتدا فایل globals را اجرا کنید یا از --no-owner در pg_restore استفاده کنید.
خطای extension چطور رفع میشود؟
بستهٔ extension را روی سرور مقصد نصب کنید (مثلاً postgresql-16-postgis-3) و سپس دوباره ریستور را اجرا کنید.