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

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


Como você deve saber, o Microsoft SQL Server é um RDBMS muito popular com licenciamento altamente restritivo e alto custo de propriedade se o banco de dados for de tamanho significativo ou for usado por um número significativo de clientes. Ele fornece uma interface muito amigável e fácil de aprender. Isso resultou em uma grande base de usuários instalada.

PostgreSQL é o banco de dados de código aberto mais avançado do mundo. A comunidade PostgreSQL é muito forte e aprimora continuamente os recursos existentes e implementa novos recursos. De acordo com o ranking de popularidade do db-engine, o PostgreSQL foi o DBMS do ano de 2017.

Por que migrar do MS SQL Server para o PostgreSQL?

  1. O MS SQL Server é um banco de dados proprietário da Microsoft, enquanto o PostgreSQL é desenvolvido e mantido por uma comunidade global de desenvolvedores de código aberto. Se o custo for um problema, então definitivamente você deve usar o PostgreSQL. Você pode verificar os preços aqui.
  2. PostgreSQL é um mecanismo de banco de dados multiplataforma e está disponível para Windows, Mac, Solaris, FreeBSD e Linux, enquanto o SQL Server é executado apenas no sistema operacional Windows. Como você deve saber, o PostgreSQL é de código aberto e totalmente gratuito, enquanto o custo do MSSQL Server depende do número de usuários e do tamanho do banco de dados.
  3. Licenciamento flexível de código aberto e fácil disponibilidade de provedores de nuvem pública como AWS, Google Cloud etc.
  4. Aproveite os complementos de código aberto para melhorar o desempenho.

O que você deve saber


Embora o banco de dados Microsoft SQL Server e o banco de dados PostgreSQL sejam compatíveis com ANSI-SQL, ainda há diferenças entre sua sintaxe SQL, tipos de dados, diferenciação de maiúsculas e minúsculas e isso torna a transferência de dados não tão trivial.

Antes da migração, entenda as diferenças entre MSSQL e PostgreSQL. Existem muitos recursos em ambos os bancos de dados, portanto, você deve conhecer o comportamento desses recursos/funções no MSSQL e no PostgreSQL. Verifique algumas diferenças importantes que você deve saber antes da migração.

Mapeamento de tipo de dados


Alguns dos tipos de dados do MSSQL não correspondem diretamente aos tipos de dados do PostgreSQL, portanto, você precisa alterá-los para o tipo de dados do PostgreSQL correspondente.

Por favor, verifique a tabela abaixo.
Microsoft SQL Server PostgreSQL
GRANDE inteiro de 64 bits GRANDE
BINÁRIO(n) Cadeia de bytes de comprimento fixo BYTEA
BIT 1, 0 ou NULL BOOLEANO
CHAR(n) String de caracteres de comprimento fixo, 1 <=n <=8000 CHAR(n)
VARCHAR(n) Sequência de caracteres de comprimento variável, 1 <=n <=8000 VARCHAR(n)
VARCHAR(max) String de caracteres de comprimento variável, <=2 GB TEXTO
VARBINARY(n) String de bytes de comprimento variável, 1 <=n <=8000 BYTEA
VARBINARY(max) String de bytes de comprimento variável, <=2 GB BYTEA
NVARCHAR(n) String Unicode UCS-2 de comprimento variável VARCHAR(n)
NVARCHAR(máx.) Dados Unicode UCS-2 de comprimento variável, <=2 GB TEXTO
TEXTO Dados de caracteres de comprimento variável, <=2 GB TEXTO
NTEXTO Dados Unicode UCS-2 de comprimento variável, <=2 GB TEXTO
DUPLA PRECISÃO Número de ponto flutuante de precisão dupla DUPLA PRECISÃO
FLOAT(p) Número de ponto flutuante DUPLA PRECISÃO
INTEIRO inteiro de 32 bits INTEIRO
NUMERIC(p,s) Número de ponto fixo NUMERIC(p,s)
DATA A data inclui ano, mês e dia DATA
DATETIME Data e hora com fração TIMESTAMP(3)
DATETIME2(p) Data e hora com fração TIMESTAMP(n)
DATETIMEOFFSET(p) Data e hora com fração e fuso horário TIMESTAMP(p) COM FUSO HORÁRIO
SMALLDATETIME Data e hora TIMESTAMP(0)
TINYINT Inteiro sem sinal de 8 bits, 0 a 255 SMALLINT
IDENTIFICADOR ÚNICO Dados GUID(UUID) de 16 bytes CHAR(16)
ROWVERSION Dados binários atualizados automaticamente BYTEA
PEQUENO DINHEIRO valor da moeda de 32 bits DINHEIRO
IMAGEM Dados binários de comprimento variável, <=2 GB BYTEA
Baixe o whitepaper hoje PostgreSQL Management &Automation with ClusterControlSaiba o que você precisa saber para implantar, monitorar, gerenciar e dimensionar o PostgreSQLBaixe o whitepaper

Incompatibilidades no MS SQL Server e PostgreSQL


Existem muitas incompatibilidades presentes no MS SQL Server e PostgreSQL, você pode ver algumas delas aqui. Você pode automatizá-los criando extensões para poder usar a função MS SQL Server como está no PostgreSQL e economizar seu tempo.

DATEPART


DATEPART deve ser substituído por DATE_PART no PostgreSQL.

Exemplo


MSSQL:
DATEPART( datepart , date )

PostgreSQL:
date_part( text , timestamp )
date_part( text , interval )

ISNULO


A função ISNULL deve ser substituída pela função COALESCE no PostgreSQL.

Exemplo


Servidor MS SQL:
ISNULL(exp, replacement)

PostgreSQL:
COALESCE(exp, replacement)

ESPAÇO


A função SPACE no MS SQL Server deve ser substituída pela função REPEAT no PostgreSQL.

Exemplo


Servidor MS SQL:
SPACE($n)

Onde $n é o número de espaços a serem retornados.

PostgreSQL:
REPEAT(‘ ’, $n)

DATAADD


O PostgreSQL não fornece a função DATEADD semelhante ao MS SQL Server, você pode usar aritmética de data e hora com literais de intervalo para obter os mesmos resultados.

Exemplo


Servidor MS SQL:
--Add 2 day to the current date
SELECT DATEADD(day, 2, GETDATE());

PostgreSQL:
--Add 2 day to the current date
SELECT CURRENT_DATE + INTERVAL ‘2 day’;

Concatenação de string


O MS SQL Server usa '+' para concatenação de strings, enquanto o PostgreSQL usa '||' para o mesmo.

Exemplo


Servidor MS SQL:
SELECT FirstName + LastName FROM employee;

PostgreSQL:
SELECT FirstName || LastName FROM employee;

CHARINDEX


Existe a função CHARINDEX no PostgreSQL. Você pode substituir esta função pela função POSITION equivalente do PostgreSQL.

Exemplo


Servidor MS SQL:
SELECT CHARINDEX('our', 'resource');

PostgreSQL:
SELECT POSITION('our' in 'resource');

GETDATA


A função GETDATE retorna a data e hora atuais. Não existe a função GETDATE no PostgreSQL, mas existe a função NOW() para o mesmo propósito. Se houver várias ocorrências da função GETDATE, você poderá automatizá-las usando extensão. Por favor, verifique como criar módulos usando extensão.

Exemplo


Servidor MS SQL:
SELECT GETDATE();

PostgreSQL:
SELECT NOW();

Ferramentas


Você pode usar algumas ferramentas para migrar o banco de dados MS SQL Server para o PostgreSQL. Por favor, teste a ferramenta antes de usá-la.
  1. Pgloader


    Você pode usar a ferramenta pgloader para migrar o banco de dados MS SQL para o PostgreSQL. Os comandos no pgloader carregam os dados do banco de dados MS SQL. O Pgloader suporta a descoberta automática do esquema, incluindo a construção dos índices, chaves primárias e restrições de chaves estrangeiras.

    O Pgloader fornece várias regras de conversão que podem converter o tipo de dados MS SQL em um tipo de dados PostgreSQL.
  2. Sqlserver2pgsql


    Esta é outra ferramenta de migração de código aberto para converter o banco de dados Microsoft SQL Server em um banco de dados PostgreSQL, da forma mais automática possível. Sqlserver2pgsql é escrito em Perl.

    A ferramenta Sqlserver2pgsql faz duas coisas:
    1. Ele converte um esquema do SQL Server em um esquema do PostgreSQL
    2. Ele pode produzir um jib do Pentaho Data Integrator (Kettle) para migrar todos os dados do SQL Server para o PostgreSQL. Esta é uma parte opcional.

Teste


Testar o aplicativo e o banco de dados migrado é muito importante porque algumas das funções são as mesmas nos dois bancos de dados, porém, o comportamento é diferente.

Alguns cenários comuns precisam ser verificados:
  • Verifique se todos os objetos de banco de dados foram convertidos corretamente ou não.
  • Verifique se o comportamento de todas as funções em DML está funcionando corretamente ou não.
  • Carregue dados de amostra em ambos os bancos de dados e verifique o resultado de todas as consultas DML em ambos os bancos de dados. O resultado de todos os SQLs deve ser o mesmo.
  • Verifique o desempenho do DML e melhore-o, se necessário.