Como converter um banco de dados MySQL para PostgreSQL?

20

Existe alguma ferramenta de linha de comando para converter o banco de dados MySQL para PostgreSQL? Eu também gostaria de saber se existe uma maneira de converter o banco de dados usando o mysqldumpcomando normal .

Mughil
fonte
11
Comece aqui: wiki.postgresql.org/wiki/…
a_horse_with_no_name
4
Sempre que vejo isso, choro de alegria.
Rfusca
ora2pg.darold.net
a_horse_with_no_name
Essa é facilmente uma das perguntas mais úteis em todo o site.
Evan Carroll

Respostas:

13

você tentou:

mysqldump --compatible=postgresql dbname > export.sql

faça isso para escapar de aspas

sed "s/\\\'/\'\'/g" export.sql > export1.sql

pode precisar de mais massagens, então olhe o mysqldump doco mais de perto.

Nick Kavadias
fonte
2
Eu tentei o método dado por você, mas já está dando erro ao restaurar no PostgreSQL
Mughil
2
@Mughil qual é o erro?
Janus Troelsen
4
5 anos e ninguém está consertado mysqldumpainda. syntax error at or near "(" LINE 2: "id" int(10) NOT NULL,
Cees Timmerman
11
De acordo com dev.mysql.com/doc/refman/8.0/en/…, o único valor permitido para --compatibleéansi
phunehehe
7

Aqui estão algumas ferramentas de código aberto, que podem ser muito úteis:

FromMySqlToPostgreSql é uma ferramenta de alcance de recursos e muito fácil de usar.
Ele mapeia tipos de dados, migra restrições, índices, PKs e FKs exatamente como estavam no seu banco de dados MySQL.
Sob o capô, ele usa o PostgreSQL COPY, portanto a transferência de dados é muito rápida.
FromMySqlToPostgreSql escrito em PHP (> = 5.4).

O pgloader   é uma ferramenta de carregamento de dados para o PostgreSQL, usando o comando COPY. Sua principal vantagem sobre apenas usar

COPY
ou
\copy
, e o uso excessivo de um invólucro de dados externos, é o seu comportamento de transação, em que o pgloader mantém um arquivo separado de dados rejeitados, mas continua tentando copiar bons dados no seu banco de dados. O comportamento padrão do PostgreSQL é transacional, o que significa que qualquer linha incorreta nos dados de entrada (arquivo ou banco de dados remoto) interromperá todo o carregamento em massa da tabela. O pgloader também implementa a reformatação de dados, um exemplo típico disso é a transformação dos carimbos de dados do MySQL 0000-00-00 e 0000-00-00 00:00:00 para o PostgreSQL
NULL
value (porque nosso calendário nunca teve um ano zero).
pgloader escrito em LISP e distribuído como código fonte, então você precisa compilá-lo antes de usar.

Espero que ajude você ...

AnatolyUss
fonte
11
O pgloader é ainda uma ferramenta de migração recomendada nos documentos do postgre, então eu diria que é a melhor escolha. Eu o usei com sucesso em um banco de dados bastante pequeno com mais de 50 tabelas, funcionou como um encanto.
5303 Capaj
3

Na verdade, existe uma ferramenta de migração gratuita bastante fácil de usar, desenvolvida pelo próprio EnterpriseDB. Pode ser instalado através do StackBuilder: Migration Toolkit

uygar.raf
fonte
3

Recentemente, usei uma ferramenta não-gratuita da DBConvert para converter um banco de dados de acesso ao postgres e achei que valeu a pena o dinheiro comparado à quantidade de tempo que perdi tentando fazê-lo de forma confiável e gratuita. A vender uma ferramenta semelhante para o MySQL <-> postgres , que eu não usei, mas pode valer a pena considerar, a menos que você esteja interessado apenas em ferramentas de linha de comando.

Caso você esteja se perguntando, eu não sou afiliado a eles de nenhuma maneira :-)

Jack Douglas
fonte
3

Você pode usar o Assistente de Migração do EnterpriseDB, por exemplo.

Ele pode simular migrar o OracleDB. Mas para o Mysql, ele tem algumas limitações, por exemplo, não suporta visualizações, gatilhos, procedimentos armazenados.

Para mais informações, consulte EDB Migration Toolkit . Não tenho certeza, mas pode ser possível migrar o mysql-> oracle-> postgresql salvando seus procedimentos armazenados (caso existam).

Grep this: Ferramentas de migração de banco de dados e SQL

shcherbak
fonte
1

Isso é apenas para adicionar às respostas existentes, o que me ajudou a encontrar esta solução. Eu usei FromMySqlToPostgreSql . Tudo o que você precisa fazer é baixar e extrair o FromMySqlToPostgreSql , fazer uma cópia do arquivo de configuração de amostra, definir os valores de conexão db nele e executar o arquivo de índice com o seguinte comando:

php index.php config.xml

Simples, mas eficaz!

toing_toing
fonte
Você pode editar sua postagem com um link para esta ferramenta, por favor?
Dezso
Desculpe, eu esqueci isso. Adicionado!
toing_toing
Ah, isso é engraçado. Você percebeu que o autor da ferramenta também postou uma resposta? ;) Agora eu fiz.
Dezso
Fico lisonjeado! Ele ainda não descreveu muito sobre seu maravilhoso plugin.
toing_toing
0

Existe uma ferramenta de código-fonte aberto que fornece funcionalidades para converter um banco de dados MySQL em Postgresql db, incluindo índices, fks e dados.

https://github.com/ggarri/mysql2psql

Essa ferramenta também permite definir alterações no esquema para que você possa executar algumas atualizações no esquema atual em tempo de execução.

Gabriel Garrido
fonte