it-swarm.asia

PostgreSQL: كيفية إنشاء نسخة كاملة من مخطط قاعدة البيانات في نفس قاعدة البيانات؟

كيف يمكنني نسخ مخطط public في نفس قاعدة البيانات مع بنية جدول كاملة وبيانات ووظائف و fk و pk وما إلى ذلك.
إصداري من Postgres هو 8.4
ملاحظة. أحتاج إلى نسخ مخطط NOT قاعدة بيانات

27
sigra

لا توجد طريقة بسيطة للقيام بذلك في pg_dump/pg_restore نفسها. يمكنك تجربة ما يلي إذا كنت قادرًا على إزالة قاعدة البيانات مؤقتًا.

  1. قم بتفريغ مخططك العام باستخدام pg_dump
  2. شغل "ALTER SCHEMA public RENAME TO public_copy"
  3. استعادة تفريغ المخطط العام الخاص بك من الخطوة 1 باستخدام pg_restore
24
user1113185
pg_dump -n schema_name > dump.sql
vi dump.sql # edit the schema name
psql: psql -f dump.sql

إذا كنت عالقًا مع php ، فاستخدم إما مسامير الظهر

`/usr/bin/pg_dump-n myschema mydb -U username > /tmp/dump.sql`

أو الأمر exec (). من أجل التغيير ، يمكنك استخدام sed بنفس الطريقة.

هنا 6 أحرف أخرى

9
Scott Marlowe

باستخدام pgAdmin يمكنك القيام بما يلي. إنه دليل جميل ، ولكن قد يكون كل ما تحتاجه. سيكون النهج القائم على البرنامج النصي مرغوبًا أكثر. لست متأكدًا من مدى نجاح ذلك إذا لم يكن لديك حق وصول المسؤول وإذا كانت قاعدة البيانات كبيرة ، ولكن يجب أن تعمل بشكل جيد على قاعدة بيانات التطوير التي لديك للتو على جهاز الكمبيوتر المحلي.

  1. انقر بزر الماوس الأيمن فوق اسم المخطط الذي تريد نسخه وانقر فوق النسخ الاحتياطي. (يمكنك التعمق أكثر من ذلك واختيار النسخ الاحتياطي للهيكل بدلاً من كليهما).

  2. قم بتسمية ملف النسخ الاحتياطي واختر تنسيقًا أيضًا. (عادةً ما أستخدم Tar.)

  3. انقر فوق النسخ الاحتياطي.

  4. انقر بزر الماوس الأيمن فوق المخطط الذي قمت بنسخه احتياطيًا وانقر فوق خصائص وأعد تسميته إلى شيء آخر مؤقتًا. (مثل اسم مؤقت)

  5. انقر فوق جذر المخططات وانقر بزر الماوس الأيمن فوقها في مستعرض الكائن وانقر إنشاء مخطط جديد وأعط المخطط اسم public. سيكون هذا هو المخطط الذي تقوم بالنسخ إليه من النسخة الاحتياطية.

  6. انقر بزر الماوس الأيمن فوق المخطط الجديد عام من الخطوة 5. وانقر فوق استعادة. الاستعادة من ملف النسخ الاحتياطي في الخطوة 3.

  7. إعادة تسمية المخطط الجديد عام إلى اسم مختلف (على سبيل المثال مخطط الأخبار).

  8. إعادة تسمية المخطط اسم مؤقت التغيير من الخطوة 4 مرة أخرى إلى الاسم الأصلي.

7
Kuberchaun

يمكنك استخدام

CREATE DATABASE new_db TEMPLATE = old_db;

ثم أسقط كل المخططات التي لا تحتاجها:

DROP SCHEMA public CASCADE;
DROP SCHEMA other CASCADE;

العيب الوحيد هو أنه يجب تحديد جميع الاتصالات بـ old_db قبل أن تتمكن من إنشاء النسخة (لذا فإن العملية التي تدير CREATE DATABASE العبارة يجب ربطها ، على سبيل المثال إلى القالب 1)

إذا لم يكن هذا خيارًا ، فإن pg_dump/pg_restore هي الطريقة الوحيدة للقيام بذلك.

5
a_horse_with_no_name

التوسع على user1113185 الإجابة ، إليك سير عمل كامل باستخدام psql/pg_dump.

فيما يلي تصدير جميع كائنات old_schema واستيرادها إلى مخطط new_schema جديد ، مثل user ، في dbname قاعدة بيانات:

psql -U user -d dbname -c 'ALTER SCHEMA old_schema RENAME TO new_schema'
pg_dump -U user -n new_schema -f new_schema.sql dbname
psql -U user -d dbname -c 'ALTER SCHEMA new_schema RENAME TO old_schema'
psql -U user -d dbname -c 'CREATE SCHEMA new_schema'
psql -U user -q -d dbname -f new_schema.sql
rm new_schema.sql
3
dwelle