هل هناك أداة بسيطة لتحويل بناء جملة mysql إلى postgresql؟

StackOverflow https://stackoverflow.com/questions/92043

  •  01-07-2019
  •  | 
  •  

سؤال

لقد قمت بتجربة الأدوات المذكورة هنا, ، حقق بعضها نجاحًا أكبر من البعض الآخر، ولكن لم يعطني أي منها صيغة Postgres صالحة يمكنني استخدامها (أخطاء صغيرة وما إلى ذلك)

هل كانت مفيدة؟

المحلول

هناك mysqldump الخيار الذي يجعله يخرج كود PostgreSQL:

mysqldump --compatible=postgresql ...

نصائح أخرى

بعد مرور بعض الوقت على جوجل وجدت هذا المشنور.

  1. تحميل هذا mysql2psql جوهرة باستخدام [sudo] gem install mysql2psql.
  2. قم بإنشاء ملف التكوين عن طريق التشغيل mysql2psql.سترى خطأ ولكن أ mysql2psql.yml يجب أن يكون قد تم إنشاء الملف.
  3. يحرر mysql2psql.yml
  4. يجري mysql2psql مرة أخرى لترحيل البيانات الخاصة بك.

نصيحة:تعيين force_truncate ل true في الخاص بك mysql2psql.yml إذا كنت تريد مسح قاعدة بيانات postgresql قبل ترحيل بياناتك.

لقد استخدمت py-mysql2pgsql.بعد التثبيت، يحتاج فقط إلى ملف تكوين بسيط بتنسيق yml (المصدر، الوجهة)، على سبيل المثال:

# if a socket is specified we will use that
# if tcp is chosen you can use compression
mysql:
 hostname: localhost
 port: 3306
 socket: /tmp/mysql.sock
 username: mysql2psql
 password:
 database: mysql2psql_test
 compress: false
destination:
 # if file is given, output goes to file, else postgres
 file:
 postgres:
  hostname: localhost
  port: 5432
  username: mysql2psql
  password:
  database: mysql2psql_test

الاستخدام:

> py-mysql2pgsql -h
usage: py-mysql2pgsql [-h] [-v] [-f FILE]

Tool for migrating/converting data from mysql to postgresql.

optional arguments:
  -h, --help            show this help message and exit
  -v, --verbose         Show progress of data migration.
  -f FILE, --file FILE  Location of configuration file (default:
                        mysql2pgsql.yml). If none exists at that path,
                        one will be created for you.

المزيد على صفحتها الرئيسية https://github.com/philipsoutham/py-mysql2pgsql.

يوجد برنامج واحد للدفع مدرج في صفحة postgresql هذه:http://www.postgresql.org/download/products/1

وهذا موجود على pgFoundry:http://pgfoundry.org/projects/mysql2pgsql/

هذه الصفحة يسرد الاختلافات في بناء الجملة، ولكن لم أجد محول استعلام بسيط يعمل بعد.باستخدام ORM يمكن أن تمنع الحزمة بدلاً من SQL الخام هذه المشكلات.

أقوم حاليًا باختراق محول لقاعدة تعليمات برمجية قديمة:

function mysql2pgsql($mysql){
    return preg_replace("/limit (\d+), *(\d+)/i", "limit $1 offset $2", preg_replace("/as '([^']+)'/i", 'as "$1"', $mysql)); // Note: limit needs order
}

ل CREATE صياغات، SQLlines يحول معظمها عبر الإنترنت.لا يزال يتعين علي تعديل ملف mysqldump بعد ذلك، على الرغم من ذلك:

"mediumtext" -> "text", "^LOCK.*" -> "", "^UNLOCK.*" -> "", "`" -> '"', "'" -> "''" in 'data', "0000-00-00" -> "2000-01-01", deduplicate constraint names, " CHARACTER SET utf8 " -> " ".
"int(10)" -> "int" was missed in the last table, so pass that part of the mysqldump through http://www.sqlines.com/online again.

جرب هذا، فهو يعمل مثل السحر !!

http://www.sqlines.com/online

القي نظرة على مسبك PG, ، تميل المرافق الإضافية لـ Postgres إلى العيش هناك.أعتقد أن الأداة التي تبحث عنها موجودة بالرغم من ذلك.

على الأرجح أنك لن تحصل أبدًا على أداة لمثل هذه المهمة والتي من شأنها أن تقوم بكل وظيفتك نيابةً عنك.كن مستعدًا للقيام ببعض أعمال إعادة الهيكلة بنفسك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top