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?
- 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.
- 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.
- Fleksibel open source-licensering og nem tilgængelighed fra offentlige cloud-udbydere som AWS, Google cloud osv.
- 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 |
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.
-
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.
-
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:
- Det konverterer et SQL Server-skema til et PostgreSQL-skema
- 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.