- Создайте файл, который определяет (в схеме pgloader), как будет функционировать передача данных.Вот мой пример:
LOAD DATABASE
FROM mysql://root:password@localhost/development
INTO postgresql://helson@localhost/development
WITH include drop, create tables, create indexes, reset sequences,
workers = 8, concurrency = 1,
multiple readers per thread, rows per range = 50000,
prefetch rows = 10000
SET PostgreSQL PARAMETERS
maintenance_work_mem to '128MB',
work_mem to '12MB',
search_path to 'sakila, public, "$user"'
SET MySQL PARAMETERS
net_read_timeout = '120',
net_write_timeout = '120'
;
Существуют и другие варианты ограничения таблиц, например
including only table names matching 'users'
, которые можно включить перед точкой с запятой.
Вперед и выполните команду
pgloader schema
, где схема - это путь к файлу со схемой pgloader.
Вы можете получить некоторые ошибки.Я лично столкнулся с проблемой, когда не хватало кучи памяти для выполнения задачи.Чтобы это исправить, вам нужно собрать проект из исходного кода.
Это достаточно просто.Клонируйте репозиторий и выполните следующую команду
make DYNSIZE=20000 pgloader
. Это создаст новый исполняемый файл с гораздо большим размером кучи.Вы можете выполнить двоичный файл с помощью
./build/bin/pgloader ~/schema
или там, где находится ваша схема.
Перезапуск с увеличенным размером кучи. Могут возникнуть проблемы с ошибками строк при передаче.Для меня это было связано со строгими проблемами режима в MySQL.Мне пришлось вручную исправить эти проблемы (установка новых значений по умолчанию для столбцов, установка значений даты и времени на
NULL
вместо
0000-00-00 00:00:00
).Исправьте эти проблемы и перезапустите pgloader, но на этот раз включите только те таблицы, которые вам нужны.
И это должно быть!