PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Migrando do DB2 para o PostgreSQL - O que você deve saber


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

  1. Licenciamento flexível de código aberto e fácil disponibilidade de provedores de nuvem pública como AWS, Google Cloud, Microsoft Azure.
  2. 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.

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

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