Se migrar um banco de dados ou um aplicativo do DB2 para o PostgreSQL com apenas um tipo de conhecimento de banco de dados não é suficiente, há poucas coisas a saber sobre as diferenças entre os dois sistemas de banco de dados.
O PostgreSQL é o banco de dados avançado de código aberto mais usado no mundo. O banco de dados PostgreSQL possui um rico conjunto de recursos e a comunidade PostgreSQL é muito forte e eles estão continuamente aprimorando os recursos existentes e adicionando novos recursos. De acordo com o db-engine.com, o PostgreSQL é o DBMS do ano de 2017 e 2018.
Como você sabe DB2 e PostgreSQL são RDBMS mas existem algumas incompatibilidades. Neste blog, podemos ver algumas dessas incompatibilidades.
Por que migrar do DB2 para o PostgreSQL
- Licenciamento flexível de código aberto e fácil disponibilidade de provedores de nuvem pública como AWS, Google Cloud, Microsoft Azure.
- Aproveite os complementos de código aberto para melhorar o desempenho do banco de dados.
Você pode ver na imagem abaixo que a popularidade do PostgreSQL está aumentando ao longo do tempo em comparação com o DB2.
Juros ao longo do tempo
Avaliação de migração
A primeira etapa da migração é analisar o aplicativo e o objeto de banco de dados, descobrir as incompatibilidades entre os dois bancos de dados e estimar o tempo e o custo necessários para a migração.
Mapeamento de tipo de dados
Alguns dos tipos de dados do IBM DB2 não correspondem diretamente aos tipos de dados PostgreSQL, portanto, você precisa alterá-los para o tipo de dados PostgreSQL correspondente.
Por favor, verifique a tabela abaixo.
IBM DB2 | PostgreSQL | |
GRANDE | inteiro de 64 bits | GRANDE |
BLOB(n) | Objeto binário grande | BYTEA |
CLOB(n) | Objeto de caractere grande | TEXTO |
DBCLOB(n) | Objeto grande de caracteres UTF-16 | TEXTO |
NCLOB(n) | Objeto grande de caracteres UTF-16 | TEXTO |
CHAR(n), CHARACTER(n) | String de comprimento fixo | CHAR(n) |
VARIANDO CARACTERES(n) | String de comprimento variável | VARCHAR(n) |
NCHAR(n) | String UTF-16 de comprimento fixo | CHAR(n) |
NCHAR VARYING(n) | String UTF-16 de comprimento variável | VARCHAR(n) |
VARCHAR(n) | String de comprimento variável | VARCHAR(n) |
VARGRAPHIC(n) | String UTF-16 de comprimento variável | VARCHAR(n) |
VARCHAR(n) PARA DADOS DE BIT | Cadeia de bytes de comprimento variável | BYTEA |
NVARCHAR(n) | String UTF-16 de comprimento variável | VARCHAR(n) |
GRÁFICO(n) | String UTF-16 de comprimento fixo | CHAR(n) |
INTEIRO | inteiro de 32 bits | INTEIRO |
NUMERIC(p,s) | Número de ponto fixo | NUMERIC(p,s) |
DECIMAL(p,s) | Número de ponto fixo | DECIMAL(p,s) |
DUPLA PRECISÃO | Número de ponto flutuante de precisão dupla | DUPLA PRECISÃO |
FLOAT(p) | Número de ponto flutuante de precisão dupla | DUPLA PRECISÃO |
REAL | Número de ponto flutuante de precisão simples | REAL |
SMALLINT | inteiro de 16 bits | SMALLINT |
DATA | Data(ano, mês e dia) | DATA |
HORA | TIME (hora, minuto e segundo) | HORA(0) |
TIMESTAMP(p) | Data e hora com fração | TIMESTAMP(p) |
DECFLOAT(16 | 34) | Número de ponto flutuante IEEE | FLUTUAR |
Incompatibilidades no DB2 e PostgreSQL
Existem muitas incompatibilidades presentes no DB2 e no PostgreSQL, você pode ver algumas delas aqui. Você pode automatizá-los criando extensões para poder usar a função do DB2 como está no PostgreSQL e economizar seu tempo. Verifique o comportamento da função DB2 no PostgreSQL
TABLESPACE
A cláusula TABLESPACE define o nome do tablespace no qual reside a tabela recém-criada.
O DB2 usa a cláusula IN para TABLESPACE, portanto, deve ser substituída pela cláusula TABLESPACE no PostgreSQL.
Exemplo:
DB2:
IN <tablespace_name>
PostgreSQL:
TABLESPACE <tablespace_name>
APENAS PRIMEIRA BUSCA n LINHAS
No DB2, você pode usar a cláusula FETCH FIRST n ROWS ONLY para recuperar não mais que n linhas. No PostgreSQL, você pode usar LIMIT n que é equivalente a FETCH FIRST n ROWS ONLY.
Exemplo:
DB2:
SELECT * FROM EMP
ORDER BY EMPID
FETCH FIRST 10 ROWS ONLY;
PostgreSQL:
SELECT * FROM EMP
ORDER BY EMPID
LIMIT 10;
GERADO POR PADRÃO COMO IDENTIDADE
A coluna IDENTITY no DB2 pode ser substituída pela coluna Serial no PostgreSQL.
DB2:
CREATE TABLE <table_name> (
<column_name> INTEGER NOT NULL
GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1, CACHE 20)
);
PostgreSQL:
CREATE TABLE <table_name> (
<column_name> SERIAL NOT NULL
);
Selecione de SYSIBM.SYSDUMMY1
Não existe uma tabela “SYSIBM.SYSDUMMY1” no PostgreSQL. O PostgreSQL permite um “SELECT” sem a cláusula “FROM”. Você pode remover isso usando script.
Funções escalares:DB2 vs PostgreSQL
TETO/TETO
CEIL ou CEILING retorna o próximo menor valor inteiro que é maior ou igual à entrada (por exemplo, CEIL(122.89) retorna 123, também CEIL(122.19) retorna 123).
DB2:
SELECT CEIL(123.89) FROM SYSIBM.SYSDUMMY1;
SELECT CEILING(123.89) FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT CEIL(123.89) ;
SELECT CEILING(123.89) ;
DATA
Ele converte a entrada em valores de data. Você pode converter a função DATE para a função TO_DATE no PostgreSQL.
DB2:
SELECT DATE ('2018-09-21') FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT TO_DATE ('21-09-2018',’DD-MM-YYYY’) ;
DIA
Retorna a parte do dia (dia do mês) de uma data ou valor equivalente. O formato de saída é inteiro.
DB2:
SELECT DAY (DATE('2016-09-21')) FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT DATE_PART('day', '2016- 09-21'::date);
MÊS
Ele retorna a parte do mês do valor da data. O formato de saída é inteiro.
DB2:
SELECT MONTH (DATE('2016-09-21')) FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT DATE_PART ('month', '2016-09- 21'::date);
POSSTR
Retorna a posição da string. A função POSSTR é substituída pela função POSITION no PostgreSQL.
DB2:
Usage : POSSTR(<Filed_1>,<Field2>)
SELECT POSSTR('PostgreSQL and DB2', 'and') FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
Usage: POSITION(<Field_1> IN<Field_2>)
SELECT POSITION('and' IN'PostgreSQL and DB2');
RAND
Ele retorna um valor de ponto flutuante pseudoaleatório no intervalo de zero a um inclusive. Você pode substituir a função RAND por RANDOM no PostgreSQL.
DB2:
SELECT RAND() FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT RANDOM();
Baixe o whitepaper hoje PostgreSQL Management &Automation with ClusterControlSaiba o que você precisa saber para implantar, monitorar, gerenciar e dimensionar o PostgreSQLBaixe o whitepaper Ferramentas
Você pode usar algumas ferramentas para migrar o banco de dados DB2 para PostgreSQL. Por favor, teste a ferramenta antes de usá-la.
-
Db2topgGenericName
É uma ferramenta automatizada para migração de DB2 para PostgreSQL como ora2pg. Os scripts na ferramenta db2pg convertem o máximo possível de um banco de dados DB2 UDB. Esta ferramenta não funciona com o DB2 zOS. É muito simples de usar, você precisa de um dump SQL do seu esquema e depois usar o script db2pg para convertê-lo em um esquema PostgreSQL.
-
Conversão total
A ferramenta corporativa copia rapidamente o banco de dados DB2 para o PostgreSQL. A conversão do banco de dados DB2 para PostgreSQL utilizando a ferramenta Full Convert é muito simples.
Passos:
- Conecte-se ao banco de dados de origem, ou seja, DB2
- Opcional:escolha as tabelas que deseja converter (por padrão, todas as tabelas selecionadas)
- Inicie a conversão.
Conclusão
Como pudemos ver, migrar do DB2 para o PostgreSQL não é ciência de foguetes, mas precisamos ter em mente o que vimos anteriormente para evitar grandes problemas em nosso sistema. Então, só precisamos ter cuidado na tarefa e seguir em frente, você pode migrar para o banco de dados open source mais avançado e aproveitar seus benefícios.