sql >> Database teknologi >  >> RDS >> PostgreSQL

Migrering fra MSSQL til PostgreSQL - hvad du bør vide

Som du måske ved, er Microsoft SQL Server meget populær RDBMS med meget restriktive licenser og høje ejeromkostninger, hvis databasen er af betydelig størrelse eller bruges af et betydeligt antal klienter. Det giver en meget brugervenlig grænseflade og nem at lære. Dette har resulteret i en stor installeret brugerbase.

PostgreSQL er verdens mest avancerede open source-database. PostgreSQL-fællesskabet er meget stærkt og forbedrer løbende eksisterende funktioner og implementerer nye funktioner. Ifølge db-engine popularitetsrangering var PostgreSQL årets DBMS 2017.

Hvorfor migrere fra MS SQL Server til PostgreSQL?

  1. MS SQL Server er en proprietær database fra Microsoft, mens PostgreSQL er udviklet og vedligeholdt af et globalt fællesskab af open source-udviklere. Hvis omkostningerne er et problem, bør du helt sikkert gå med PostgreSQL. Du kan tjekke priserne her.
  2. PostgreSQL er en databasemotor på tværs af platforme, og den er tilgængelig til Windows, Mac, Solaris, FreeBSD og Linux, mens SQL Server kun kører på Windows-operativsystemet. Som du måske ved, er PostgreSQL open source og helt gratis, mens omkostningerne til MSSQL Server afhænger af antallet af brugere og databasestørrelsen.
  3. Fleksibel open source-licensering og nem tilgængelighed fra offentlige cloud-udbydere som AWS, Google cloud osv.
  4. Drag fordel af open source-tilføjelser for at forbedre ydeevnen.

Hvad du bør vide

Selvom både Microsoft SQL Server-database og PostgreSQL-database er ANSI-SQL-kompatible, er der stadig forskelle mellem deres SQL-syntaks, datatyper, følsomhed over for store og små bogstaver, og det gør overførsel af data ikke så triviel.

Inden migrering skal du forstå forskellene mellem MSSQL og PostgreSQL. Der er mange funktioner i begge databaser, så du bør kende adfærden af ​​disse funktioner/funktioner i MSSQL og PostgreSQL. Tjek venligst nogle vigtige forskelle, du bør vide før migrering.

Data Type Mapping

Nogle af MSSQL-datatyperne matcher ikke direkte med PostgreSQL-datatyper, så du skal ændre det til tilsvarende PostgreSQL-datatype.

Tjek venligst nedenstående tabel.

Microsoft SQL Server PostgreSQL
STORT 64-bit heltal STORT
BINÆR(n) Bytestreng med fast længde BYTEA
BIT 1, 0 eller NULL BOOLEAN
CHAR(n) Char-streng med fast længde, 1 <=n <=8000 CHAR(n)
VARCHAR(n) Tar-streng med variabel længde, 1 <=n <=8000 VARCHAR(n)
VARCHAR(maks.) Tegnet-streng med variabel længde, <=2 GB TEKST
VARBINARY(n) Bytestreng med variabel længde, 1 <=n <=8000 BYTEA
VARBINARY(maks.) Bytestreng med variabel længde, <=2 GB BYTEA
NVARCHAR(n) Unicode UCS-2-streng med variabel længde VARCHAR(n)
NVARCHAR(maks.) Unicode UCS-2-data med variabel længde, <=2 GB TEKST
TEKST Tegndata med variabel længde, <=2 GB TEKST
NTEXT Unicode UCS-2-data med variabel længde, <=2 GB TEKST
DObbel PRÆCISION Dobbelt præcision flydende kommatal DObbel PRÆCISION
FLOAT(p) Flydende kommanummer DObbel PRÆCISION
INTEGER 32 bit heltal INTEGER
NUMERISK(p,s) Fast punktnummer NUMERISK(p,s)
DATO Dato inkluderer år, måned og dag DATO
DATETIME Dato og tid med brøk TIMESTAMP(3)
DATETIME2(p) Dato og tid med brøk TIMESTAMP(n)
DATETIMEOFFSET(p) Dato og tid med brøk og tidszone TIMESTAMP(p) MED TIDSZONE
SMALLDATETIME Dato og tid TIMESTAMP(0)
TINYINT 8 bit usigneret heltal, 0 til 255 SMALLINT
UNIQUEIDENTIFIER 16 byte GUID(UUID)-data CHAR(16)
ROWVERSION Automatisk opdaterede binære data BYTEA
SMÅPENGE 32 bit valutabeløb PENGE
BILLEDE Binære data med variabel længde, <=2 GB BYTEA
Download Whitepaper Today PostgreSQL Management &Automation med ClusterControlFå flere oplysninger om, hvad du skal vide for at implementere, overvåge, administrere og skalere PostgreSQLDownload Whitepaper

Inkompatibiliteter i MS SQL Server og PostgreSQL

Der er mange inkompatibiliteter til stede i MS SQL Server og PostgreSQL, du kan se nogle af dem her. Du kan automatisere dem ved at oprette udvidelser, så du kan bruge MS SQL Server-funktionen, som den er i PostgreSQL, og du kan spare din tid.

DATEPART

DATEPART skal erstattes af DATE_PART i PostgreSQL.

Eksempel

MS SQL:

DATEPART( datepart , date )

PostgreSQL:

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

NULLER

ISNULL-funktionen skal erstattes af COALESCE-funktionen i PostgreSQL.

Eksempel

MS SQL Server:

ISNULL(exp, replacement)

PostgreSQL:

COALESCE(exp, replacement)

MELLEMRUM

SPACE-funktionen i MS SQL Server skal erstattes af REPEAT-funktionen i PostgreSQL.

Eksempel

MS SQL Server:

SPACE($n)

Hvor $n er antallet af mellemrum, der skal returneres.

PostgreSQL:

REPEAT(‘ ’, $n)

DATEADD

PostgreSQL leverer ikke DATEADD-funktion, der ligner MS SQL Server, du kan bruge datetime-aritmetik med intervalliteraler for at få de samme resultater.

Eksempel

MS SQL Server:

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

Stringsammenkædning

MS SQL Server bruger '+' til strengsammenkædning, mens PostgreSQL bruger '||' til det samme.

Eksempel

MS SQL Server:

SELECT FirstName + LastName FROM employee;

PostgreSQL:

SELECT FirstName || LastName FROM employee;

CHARINDEX

Der er CHARINDEX-funktion i PostgreSQL. Du kan erstatte denne funktion med PostgreSQL tilsvarende POSITION-funktion.

Eksempel

MS SQL Server:

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

PostgreSQL:

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

GETDATE

GETDATE-funktionen returnerer den aktuelle dato og klokkeslæt. Der er ingen GETDATE-funktion i PostgreSQL, men der er NOW()-funktion til samme formål. Hvis der er flere forekomster af GETDATE-funktionen, kan du automatisere dem ved at bruge udvidelsen. Tjek venligst, hvordan du opretter moduler ved hjælp af udvidelse.

Eksempel

MS SQL Server:

SELECT GETDATE();

PostgreSQL:

SELECT NOW();

Værktøjer

Du kan bruge nogle værktøjer til at migrere MS SQL Server-databasen til PostgreSQL. Test venligst værktøjet, før du bruger det.

  1. Pgloader

    Du kan bruge pgloader-værktøjet til at migrere MS SQL-databasen til PostgreSQL. Kommandoerne i pgloaderen indlæser dataene fra MS SQL-databasen. Pgloader understøtter automatisk opdagelse af skemaet, inklusive opbygning af indekser, primærnøgle og fremmednøglebegrænsninger.

    Pgloader giver forskellige casting-regler, som kan konvertere MS SQL-datatypen til en PostgreSQL-datatype.

  2. Sqlserver2pgsql

    Dette er et andet open source-migreringsværktøj til at konvertere Microsoft SQL Server-database til en PostgreSQL-database, så automatisk som muligt. Sqlserver2pgsql er skrevet i Perl.

    Sqlserver2pgsql-værktøjet gør to ting:

    1. Det konverterer et SQL Server-skema til et PostgreSQL-skema
    2. Den kan producere en Pentaho Data Integrator (Kettle) jib til at migrere alle data fra SQL Server til PostgreSQL. Dette er en valgfri del.

Test

Det er meget vigtigt at teste applikationen og den migrerede database, fordi nogle af funktionerne er de samme i begge databaser, men adfærden er forskellig.

Nogle almindelige scenarier skal kontrolleres:

  • Tjek, om alle databaseobjekter er korrekt konverteret eller ej.
  • Tjek, at alle funktioner i DML fungerer korrekt eller ej.
  • Indlæs eksempeldata i begge databaser, og kontroller resultatet af alle DML-forespørgslerne i begge databaser. Resultatet af alle SQL'er bør være det samme.
  • Tjek DML'ens ydeevne, og forbedr den om nødvendigt.

  1. Få det aktuelle år, den aktuelle måned og den aktuelle dag i MySQL

  2. Gruppér efter måned og år i MySQL

  3. MySQL LIKE I()?

  4. Sådan overvåger du flere MySQL-forekomster, der kører på samme maskine - ClusterControl-tip og -tricks