SQL: تحويل ملف النسخ الاحتياطي من تنسيق النسخ لإدراج تنسيق
-
26-09-2019 - |
سؤال
لدي نسخة احتياطية من PostgreSQL مصنوعة من phppgadmin باستخدام COMPORT> COPY (بدلاً من ذلك copy> sql وهو ما أحتاجه بالفعل).
يحتوي الملف على إدخالات مثل هذا:
COPY tablename(id, field) FROM stdin;
...
كيفية تحويل هذا الملف إلى تنسيق SQL؟
INSERT INTO tablename...
أرغب في استخدام pgadmin لاستيراد هذا الملف باستخدام أمر تنفيذ SQL.
المحلول
لا يمكنك تحويل ذلك إلى تنسيق SQL (على الأقل ليس مباشرة).
إذا لم تتمكن من إعادة التصدير ، فإن الخيار الأكثر بساطة هو الالتفاف phppgadmin، قم بتسجيل الدخول في الخادم الخاص بك وقم بتشغيل شيء مثل
cat [yourdump.sql] | psql [your connections args]
إذا لم يكن لديك وصول Shell إلى الخادم الخاص بك ، فقد تحاول تحميل الملف (عبر SFTP أو FTP) وتحميله "COPY <table> FROM <path_to_file_on_server>"
. ولكن إذا كان هناك العديد من الجداول ، فيجب عليك (على ما أظن) تقسيم الملف والقيام بذلك في وقت واحد.
نصائح أخرى
لا أعرف طريقة أو أداة يمكنها تحويل "نسخة" إلى عبارات "إدراج".
ولكن باستخدام أداة سطر الأوامر "PG_DUMP" ، يمكنك إنشاء ملف تفريغ DB مع "إدراج" بدلاً من عبارات "Copy". الاستخدام البسيط "وسيطة" inserts "(قد تكون"-inserts "على ما يرام بالنسبة لك).
تعديل:
ما يمكنك فعله هو:
- قم بإنشاء قاعدة بيانات postgres جديدة على جهازك المحلي
استيراد ملف تفريغ DB الخاص بك في قاعدة البيانات الجديدة التي تم إنشاؤها
psql -U <dbuser> <database> < dump.sql
وقم بإنشاء تفريغ بعد أن "-العمود" من قاعدة البيانات هذه
pg_dump --column-inserts -U <dbuser> <database> > dumpWithInserts.sql
يمكنك المحاولة نسخ من البرنامج بناء الجملة ، متاح منذ postgresql 9.3
علي سبيل المثال:COPY tbl_customers (id, address_id, insurance_id, fullname, secret_code ...) FROM PROGRAM 'echo "1 2 \N Ivan Ivanov 42 ..."'
لقد كتبت أداة لتحويل نسخ من تفريغ لإدراج تفريغ:
https://github.com/freddez/pg-pump2insert
يمكنك استخدامه لتحميل تفريغ في قاعدة بيانات أخرى أو البحث عن قيم محذوفة محددة على سبيل المثال.