Назад | Перейти на главную страницу

Есть ли быстрый способ экспорта большой таблицы из mysql в postgresql?

У меня есть таблица с примерно 2,7 миллионами записей, 63 полями и несколькими индексами. Мне нужно быстро получить эту таблицу из mysql в postgresql (скажем, в течение часа). Я знаю, что mysql может быстро экспортировать данные, но postgresql кажется очень медленным при импорте данных. Любые идеи? Я импортирую CSV, созданный из mysqldump, около 3 часов.

Самый быстрый способ, который я могу придумать, - это отбросить все индексы и триггеры (или, по крайней мере, ALTER TABLE foo DISABLE TRIGGER ALL;) в таблице в postgresql добавьте \. конец строки ввода до конца вашего CSV-файла, затем поместите файл на сервер (желательно на диск, отличный от того, который используется для БД, или, может быть, где-нибудь в сети, к которому сервер может получить доступ через NFS) и COPY foo FROM '/some/file.csv' WITH CSV; (Синтаксис 8.x, который поддерживается в 9.0. В зависимости от формата файла CSV вам может потребоваться вносить изменения.) После этого воссоздайте индексы и повторно включите триггеры.

Некоторые параметры конфигурации postgres могут повлиять на время загрузки данных. Отключение автоочистки и увеличение времени между контрольными точками может помочь с огромными нагрузками, но вам нужно перезапустить postgresql, чтобы изменить checkpoint_segments или autovacuum настройки, и вы захотите снова включить автоочистку, когда закончите.

mysqldump --compatible=postgresql -h... -u... -p... dbname tablename > PostgresqlData.sql

Такой вариант существует

--compatible=name   Change the dump to be compatible with a given mode. By                      default tables are dumped in a format optimized for
                  MySQL. Legal modes are: ansi, mysql323, mysql40,
                  postgresql, oracle, mssql, db2, maxdb, no_key_options,
                  no_table_options, no_field_options. One can use several
                  modes separated by commas. Note: Requires MySQL server
                  version 4.1.0 or higher. This option is ignored with
                  earlier server versions.

Попробуйте !!!

Есть любое количество профессиональных ETL инструменты, которые могут перемещаться между базами данных с довольно высокой скоростью - например, я использовал открытый исходный код Pentaho PDI (в девичестве Чайник) попадание в диапазоне 100 тыс. строк в секунду. Это также дает несколько других преимуществ, таких как возможность объединять данные в несколько новых структур, графический интерфейс для процесса сопоставления и так далее.