PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Migration de MSSQL vers PostgreSQL - Ce que vous devez savoir

Comme vous le savez peut-être, Microsoft SQL Server est un SGBDR très populaire avec des licences très restrictives et un coût de possession élevé si la base de données est de taille importante ou est utilisée par un nombre important de clients. Il fournit une interface très conviviale et facile à apprendre. Cela a abouti à une large base d'utilisateurs installés.

PostgreSQL est la base de données open source la plus avancée au monde. La communauté PostgreSQL est très forte et améliore continuellement les fonctionnalités existantes et implémente de nouvelles fonctionnalités. Selon le classement de popularité de db-engine, PostgreSQL a été le SGBD de l'année 2017.

Pourquoi migrer de MS SQL Server vers PostgreSQL ?

  1. MS SQL Server est une base de données propriétaire de Microsoft, tandis que PostgreSQL est développé et géré par une communauté mondiale de développeurs Open Source. Si le coût est un problème, alors vous devriez certainement opter pour PostgreSQL. Vous pouvez vérifier les prix ici.
  2. PostgreSQL est un moteur de base de données multiplateforme et il est disponible pour Windows, Mac, Solaris, FreeBSD et Linux tandis que SQL Server ne fonctionne que sur le système d'exploitation Windows. Comme vous le savez peut-être, PostgreSQL est open source et entièrement gratuit, tandis que le coût de MSSQL Server dépend du nombre d'utilisateurs et de la taille de la base de données.
  3. Licences open source flexibles et disponibilité facile auprès des fournisseurs de cloud public comme AWS, Google cloud, etc.
  4. Bénéficiez de modules complémentaires open source pour améliorer les performances.

Ce que vous devez savoir

Bien que la base de données Microsoft SQL Server et la base de données PostgreSQL soient toutes deux conformes à ANSI-SQL, il existe toujours des différences entre leur syntaxe SQL, les types de données, la sensibilité à la casse, et cela rend le transfert de données pas si trivial.

Avant la migration, comprenez les différences entre MSSQL et PostgreSQL. Il existe de nombreuses fonctionnalités dans les deux bases de données, vous devez donc connaître le comportement de ces fonctionnalités/fonctions dans MSSQL et PostgreSQL. Veuillez vérifier certaines différences importantes que vous devez connaître avant la migration.

Mappage des types de données

Certains des types de données de MSSQL ne correspondent pas directement aux types de données PostgreSQL, vous devez donc le remplacer par le type de données PostgreSQL correspondant.

Veuillez vérifier le tableau ci-dessous.

Microsoft SQL Server PostgreSQL
BIGINT Entier 64 bits BIGINT
BINAIRE(n) Chaîne d'octets de longueur fixe BYTEA
BIT 1, 0 ou NULL BOOLÉEN
CHAR(n) Chaîne de caractères de longueur fixe, 1 <=n <=8000 CHAR(n)
VARCHAR(n) Chaîne de caractères de longueur variable, 1 <=n <=8000 VARCHAR(n)
VARCHAR(max) Chaîne de caractères de longueur variable, <=2 Go TEXTE
VARBINAIRE(n) Chaîne d'octets de longueur variable, 1 <=n <=8000 BYTEA
VARBINAIRE(max) Chaîne d'octets de longueur variable, <=2 Go BYTEA
NVARCHAR(n) Chaîne Unicode UCS-2 de longueur variable VARCHAR(n)
NVARCHAR(max) Données Unicode UCS-2 de longueur variable, <=2 Go TEXTE
TEXTE Données de caractères de longueur variable, <=2 Go TEXTE
NTEXT Données Unicode UCS-2 de longueur variable, <=2 Go TEXTE
DOUBLE PRÉCISION Nombre à virgule flottante double précision DOUBLE PRÉCISION
FLOAT(p) Nombre à virgule flottante DOUBLE PRÉCISION
ENTIER Entier 32 bits ENTIER
NUMÉRIQUE(p,s) Numéro à virgule fixe NUMÉRIQUE(p,s)
DATE La date inclut l'année, le mois et le jour DATE
DATEHEURE Date et heure avec fraction TIMESTAMP(3)
DATETIME2(p) Date et heure avec fraction TIMESTAMP(n)
DATETIMEOFFSET(p) Date et heure avec fraction et fuseau horaire TIMESTAMP(p) AVEC FUSEAU HORAIRE
SMALLDATETIME Date et heure TIMESTAMP(0)
TINYINT Entier non signé 8 bits, 0 à 255 SMALLINT
IDENTIFIANT UNIQUE Données GUID (UUID) de 16 octets CAR(16)
ROWVERSION Données binaires mises à jour automatiquement BYTEA
PEU D'ARGENT Montant en devise 32 bits ARGENT
IMAGE Données binaires de longueur variable, <=2 Go BYTEA
Téléchargez le livre blanc aujourd'hui PostgreSQL Management &Automation with ClusterControlDécouvrez ce que vous devez savoir pour déployer, surveiller, gérer et faire évoluer PostgreSQLTélécharger le livre blanc

Incompatibilités dans MS SQL Server et PostgreSQL

Il existe de nombreuses incompatibilités présentes dans MS SQL Server et PostgreSQL, vous pouvez en voir quelques-unes ici. Vous pouvez les automatiser en créant des extensions afin de pouvoir utiliser la fonction MS SQL Server telle qu'elle est dans PostgreSQL et vous faire gagner du temps.

DATEPART

DATEPART doit être remplacé par DATE_PART dans PostgreSQL.

Exemple

MS SQL :

DATEPART( datepart , date )

PostgreSQL :

date_part( text , timestamp )
date_part( text , interval )

EST NULL

La fonction ISNULL doit être remplacée par la fonction COALESCE dans PostgreSQL.

Exemple

Serveur MS SQL :

ISNULL(exp, replacement)

PostgreSQL :

COALESCE(exp, replacement)

ESPACE

La fonction SPACE dans MS SQL Server doit être remplacée par la fonction REPEAT dans PostgreSQL.

Exemple

Serveur MS SQL :

SPACE($n)

Où $n est le nombre d'espaces à renvoyer.

PostgreSQL :

REPEAT(‘ ’, $n)

DATEADJ

PostgreSQL ne fournit pas de fonction DATEADD similaire à MS SQL Server, vous pouvez utiliser l'arithmétique datetime avec des littéraux d'intervalle pour obtenir les mêmes résultats.

Exemple

Serveur 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’;

Concaténation de chaînes

MS SQL Server utilise '+' pour la concaténation de chaînes alors que PostgreSQL utilise '||' pour la même chose.

Exemple

Serveur MS SQL :

SELECT FirstName + LastName FROM employee;

PostgreSQL :

SELECT FirstName || LastName FROM employee;

CHARINDEX

Il existe une fonction CHARINDEX dans PostgreSQL. Vous pouvez remplacer cette fonction par la fonction POSITION équivalente de PostgreSQL.

Exemple

Serveur MS SQL :

SELECT CHARINDEX('our', 'resource');

PostgreSQL :

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

OBTENIR DATE

La fonction GETDATE renvoie la date et l'heure actuelles. Il n'y a pas de fonction GETDATE dans PostgreSQL, mais il existe la fonction NOW() dans le même but. S'il existe plusieurs occurrences de la fonction GETDATE, vous pouvez les automatiser à l'aide de l'extension. Veuillez vérifier comment créer des modules à l'aide de l'extension.

Exemple

Serveur MS SQL :

SELECT GETDATE();

PostgreSQL :

SELECT NOW();

Outils

Vous pouvez utiliser certains outils pour migrer la base de données MS SQL Server vers PostgreSQL. Veuillez tester l'outil avant de l'utiliser.

  1. Pgloader

    Vous pouvez utiliser l'outil pgloader pour migrer la base de données MS SQL vers PostgreSQL. Les commandes du pgloader chargent les données de la base de données MS SQL. Pgloader prend en charge la découverte automatique du schéma, y ​​compris la construction des index, les contraintes de clé primaire et de clé étrangère.

    Pgloader fournit diverses règles de conversion qui peuvent convertir le type de données MS SQL en un type de données PostgreSQL.

  2. Sqlserver2pgsql

    Il s'agit d'un autre outil de migration open source pour convertir la base de données Microsoft SQL Server en une base de données PostgreSQL, aussi automatiquement que possible. Sqlserver2pgsql est écrit en Perl.

    L'outil Sqlserver2pgsql fait deux choses :

    1. Il convertit un schéma SQL Server en schéma PostgreSQL
    2. Il peut produire un jib Pentaho Data Integrator (Kettle) pour migrer toutes les données de SQL Server vers PostgreSQL. Ceci est une partie facultative.

Test

Le test de l'application et de la base de données migrée est très important car certaines des fonctions sont les mêmes dans les deux bases de données, cependant, le comportement est différent.

Certains scénarios courants doivent être vérifiés :

  • Vérifiez si tous les objets de la base de données sont correctement convertis ou non.
  • Vérifiez que le comportement de toutes les fonctions dans DML fonctionne correctement ou non.
  • Chargez des exemples de données dans les deux bases de données et vérifiez le résultat de toutes les requêtes DML dans les deux bases de données. Le résultat de tous les SQL doit être le même.
  • Vérifiez les performances du DML et améliorez-les si nécessaire.