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 .



4
Sempre que vejo isso, choro de alegria.
Rfusca


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.


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ê ...


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


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 :-)


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


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!


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.