Импортировать дамп MySQL в базу данных PostgreSQL - PullRequest
50 голосов
/ 24 марта 2011

Как я могу импортировать дамп "xxxx.sql" из MySQL в базу данных PostgreSQL?

Ответы [ 16 ]

2 голосов
/ 28 марта 2013

Вот простая программа для создания и загрузки всех таблиц в базе данных mysql (honey) в postgresql.Преобразование типов из MySQL является грубым, но легко уточняется.Вам придется заново создать индексы вручную:

import MySQLdb
from magic import Connect #Private mysql connect information
import psycopg2

dbx=Connect()
DB=psycopg2.connect("dbname='honey'")
DC=DB.cursor()

mysql='''show tables from honey'''
dbx.execute(mysql); ts=dbx.fetchall(); tables=[]
for table in ts: tables.append(table[0])
for table in tables:
    mysql='''describe honey.%s'''%(table)
    dbx.execute(mysql); rows=dbx.fetchall()
    psql='drop table %s'%(table)
    DC.execute(psql); DB.commit()

    psql='create table %s ('%(table)
    for row in rows:
        name=row[0]; type=row[1]
        if 'int' in type: type='int8'
        if 'blob' in type: type='bytea'
        if 'datetime' in type: type='timestamptz'
        psql+='%s %s,'%(name,type)
    psql=psql.strip(',')+')'
    print psql
    try: DC.execute(psql); DB.commit()
    except: pass

    msql='''select * from honey.%s'''%(table)
    dbx.execute(msql); rows=dbx.fetchall()
    n=len(rows); print n; t=n
    if n==0: continue #skip if no data

    cols=len(rows[0])
    for row in rows:
        ps=', '.join(['%s']*cols)
        psql='''insert into %s values(%s)'''%(table, ps)
        DC.execute(psql,(row))
        n=n-1
        if n%1000==1: DB.commit(); print n,t,t-n
    DB.commit()
1 голос
/ 02 октября 2018

Mac / Win

Скачать пробную версию Navicat в течение 14 дней (я не понимаю $ 1300) - полный корпоративный пакет:

соединяет обе базы данных mysql и postgres

меню - инструменты - передача данных

подключите обе базы данных на этом первом экране. В то время как все еще на этом экране есть общие / параметры - под проверкой параметров на правой стороне - продолжить при ошибке * обратите внимание, что вы, вероятно, хотите отменить проверку индексов и ключей слева .. вы можете легко переназначить их в postgres.

по крайней мере, получить ваши данные из MySQL в Postgres!

надеюсь, это поможет!

1 голос
/ 11 июля 2015

Как и при большинстве миграций баз данных, на самом деле не существует подходящего решения.

Вот некоторые идеи, которые следует учитывать при выполнении миграции:

  1. Типы данных не будут совпадать.Некоторые будут, некоторые нет.Например, биты SQL Server (логические) не имеют эквивалента в Oracle.
  2. Последовательности первичных ключей будут генерироваться по-разному в каждой базе данных.
  3. Внешние ключи будут указывать на ваши новые последовательности.
  4. Индексы будут другими и, вероятно, потребуется настроить.
  5. Любые хранимые процедуры должны быть переписаны
  6. Схемы.Mysql не использует их (по крайней мере, так как я это использовал), Postgresql делает.Не помещайте все в общедоступную схему.Это плохая практика, но большинство приложений (которые приходят на ум Django), которые поддерживают Mysql и Postgresql, попытаются заставить вас использовать общедоступную схему.
  7. Миграция данных.Вам нужно будет вставить все из старой базы данных в новую.Это означает отключение первичных и внешних ключей, вставку данных, а затем их включение.Кроме того, все ваши новые последовательности должны быть сброшены до самого высокого идентификатора в каждой таблице.Если нет, следующая вставленная запись завершится с нарушением первичного ключа.
  8. Переписать ваш код для работы с новой базой данных.Это должно работать, но, вероятно, не будет.
  9. Не забудьте триггеры.Я использую триггеры даты создания и обновления в большинстве моих таблиц.Каждый дб их сайтов немного отличается.

Имейте это в виду.Лучше всего написать утилиту для конвертации.Счастливого обращения!

0 голосов
/ 15 августа 2016

Используйте свой файл xxx.sql для настройки базы данных MySQL и используйте FromMysqlToPostrgreSQL .Очень прост в использовании, короткая конфигурация и работает как шарм.Он импортирует вашу базу данных с установленными первичными ключами, внешними ключами и индексами в таблицах.Вы даже можете импортировать данные в одиночку, если установите соответствующий флаг в файле конфигурации.

Инструмент миграции FromMySqlToPostgreSql Анатолия Хайтовича, обеспечивает точную миграцию табличных данных, индексов, PK, FKs ...широкое использование PostgreSQL COPY протокола.

См. также здесь: PG Wiki Page

0 голосов
/ 02 августа 2016

Я могу скопировать таблицы из MySQL в Postgres, используя DBCopy Plugin для SQuirreL SQL Client . Это было не из дампа, а между живыми базами данных.

0 голосов
/ 11 июля 2015

Мне пришлось сделать это недавно для большого количества .sql файлов размером примерно 7 ГБ.Даже у VIM были проблемы с их редактированием.Лучше всего импортировать файл .sql в MySql, а затем экспортировать его в формате csv, который затем можно импортировать в Postgres.

Но экспорт MySQL как csv ужасно медленный, так как он запускает select * из вашего запроса .Если у вас большая база данных / таблица, я бы предложил использовать другой метод.Одним из способов является написание сценария, который читает строку SQL для вставки построчно и использует строковые манипуляции, чтобы переформатировать его в «Postgres-совместимые» операторы вставки, а затем выполнить эти операторы в Postgres

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...