نصائح تقنية: كيف يمكنني نسخ قاعدة بيانات Postgres احتياطيًا واستعادتها؟
كران سينغ
19/06/2013
البريد الإلكتروني
1 min read

النقاط الرئيسية
يمكن أن تستهدف النسخ الاحتياطية لـ PostgreSQL جدولًا واحدًا أو قاعدة بيانات واحدة أو جميع قواعد البيانات اعتمادًا على احتياجاتك.
pg_dumpينشئ ملف نصي SQL يحتوي على DDL والبيانات اللازمة لإعادة إنشاء الجدول أو قاعدة البيانات المستهدفة.pg_dumpallيحتفظبنُسخ احتياطية لجميع قواعد البيانات على مثيل Postgres.تتم الاستعادة باستخدام
psql، والذي ينفذ تفريغ SQL مرة أخرى في قاعدة البيانات المستهدفة.تتطلب عمليات الاستعادة على مستوى الجدول ضمان أن الجدول غير موجود مسبقًا لتجنب النزاعات.
عند نسخ جداول فردية احتياطيًا، كن حذرًا من التبعيات العلائقية.
يمكن أخذ التفريغات من محلية واستعادتها إلى مثيلات Postgres بعيدة.
تتضمن النسخ الاحتياطية أوامر
CREATEوALTERوCOPYاعتمادًا على ما يتم تصديره.تعتمد إستراتيجية النسخ الاحتياطي المناسبة على فهم علاقات الجداول، واستخدام المخطط، وبيئات النشر.
تأكد دائمًا من تكامل البيانات عن طريق أخذ نسخ احتياطية تتضمن الجداول المشار إليها عند الضرورة.
أبرز الأسئلة والأجوبة
ما الذي يفعله pg_dump فعلياً؟
pg_dumpيقوم بإنشاء ملف SQL نصي يحتوي على المجموعة الكاملة من الأوامر اللازمة لإعادة إنشاء جدول أو قاعدة بيانات تمامًا كما كانت موجودة في وقت النسخ الاحتياطي.هل يمكنني نسخ جدول واحد فقط احتياطيًا بدلاً من قاعدة بيانات كاملة؟
نعم. استخدم
pg_dump --table TABLENAMEلتصدير جدول محدد. إذا كانت هناك جداول بنفس الاسم موجودة عبر المخططات، فاستخدم--schemaلتحديد المخطط الصحيح.هل يجب أن أقلق بشأن الجداول المرتبطة عند أخذ نسخة احتياطية لجدول واحد؟
بالطبع. PostgreSQL هو نظام قاعدة بيانات علائقية، لذا قد تشير جداول أخرى إلى الجدول الذي تقوم بعمل نسخ احتياطي له. إذا قمت باستعادة جدول واحد فقط دون الجداول المرتبطة، فقد تقوم بكسر سلامة المراجع.
كيف يمكنني نسخ قاعدة بيانات كاملة احتياطيًا؟
قم بتشغيل أمر مثل:
pg_dump -U <user> <database> -f <output.sql>يقوم هذا بتصدير جميع الجداول وتعريفات المخطط والفهارس والبيانات لذلك قاعدة البيانات.
ماذا يفعل pg_dumpall؟
pg_dumpallيقوم بعمل نسخة احتياطية من كل قاعدة بيانات على الخادم إلى ملف SQL واحد. إنه مفيد عند ترحيل أو أخذ لقطة لكمية كاملة من مثيل Postgres.هل يمكنني استعادة جدول في قاعدة بيانات موجودة؟
نعم. استخدم
psql -U <user> -f <file.sql> <database>.لكن تأكد من أن الجدول غير موجود بالفعل — وإلا فستحصل على أخطاء "موجود بالفعل" أثناء الاستعادة.
ماذا يحدث أثناء استعادة قاعدة البيانات بالكامل؟
ملف الاستعادة يعمل:
CREATE TABLEALTER TABLECOPY(لبيانات الجدول)
إعادة قاعدة البيانات إلى حالتها بالضبط في وقت الإسقاط.
هل يمكنني الاستعادة إلى خادم مختلف عن الذي قمت بالنسخ الاحتياطي منه؟
نعم. النُسخ الاحتياطية قابلة للنقل. يمكنك أخذ نسخة احتياطية محليًا واستعادتها إلى مثيل Postgres بعيد، بشرط أن تكون الإصدارات متوافقة.
هل يؤثر pg_dump على قاعدة البيانات التي تعمل؟
لا. إنه يعمل عن طريق استعلامات SQL ولا يقفل قاعدة البيانات بأكملها. إنه يلتقط بسلام لقطة متسقة.
كيف يمكنني استعادة جميع قواعد البيانات من ملف pg_dumpall؟
استخدام:
psql -U <user> -f all_dump.sqlهذا يعيد إنشاء كل قاعدة بيانات موجودة في التفريغ.



