Som du kanske vet är Microsoft SQL Server mycket populär RDBMS med mycket restriktiva licenser och höga ägandekostnader om databasen är av betydande storlek eller används av ett betydande antal klienter. Det ger ett mycket användarvänligt gränssnitt och lätt att lära sig. Detta har resulterat i en stor installerad användarbas.
PostgreSQL är världens mest avancerade databas med öppen källkod. PostgreSQL-communityt är mycket starkt och förbättrar ständigt befintliga funktioner och implementerar nya funktioner. Enligt db-motorernas popularitetsrankning var PostgreSQL årets DBMS 2017.
Varför migrera från MS SQL Server till PostgreSQL?
- MS SQL Server är en egenutvecklad databas från Microsoft, medan PostgreSQL utvecklas och underhålls av en global community av utvecklare med öppen källkod. Om kostnaden är ett problem, bör du definitivt gå med PostgreSQL. Du kan kontrollera priset här.
- PostgreSQL är en plattformsoberoende databasmotor och den är tillgänglig för Windows, Mac, Solaris, FreeBSD och Linux medan SQL Server endast körs på Windows operativsystem. Som du kanske vet är PostgreSQL öppen källkod och helt gratis medan kostnaden för MSSQL Server beror på antalet användare och databasstorlek.
- Flexibel licensiering med öppen källkod och enkel tillgänglighet från offentliga molnleverantörer som AWS, Google moln etc.
- Dra nytta av tillägg med öppen källkod för att förbättra prestandan.
Vad du bör veta
Även om både Microsoft SQL Server-databas och PostgreSQL-databas är ANSI-SQL-kompatibla, men det finns fortfarande skillnader mellan deras SQL-syntax, datatyper, skiftlägeskänslighet och det gör överföringen av data inte så trivial.
Före migrering, förstå skillnaderna mellan MSSQL och PostgreSQL. Det finns många funktioner i båda databaserna så du bör känna till beteendet hos dessa funktioner i MSSQL och PostgreSQL. Kontrollera några viktiga skillnader som du bör känna till innan migreringen.
Datatypmappning
Vissa av MSSQL-datatyperna matchar inte direkt med PostgreSQL-datatyper, så du måste ändra den till motsvarande PostgreSQL-datatyp.
Kontrollera tabellen nedan.
Microsoft SQL Server | PostgreSQL | |
---|---|---|
STORT | 64-bitars heltal | STORT |
BINÄR(n) | Bytesträng med fast längd | BYTEA |
BIT | 1, 0 eller NULL | BOOLEAN |
CHAR(n) | Teckensträng med fast längd, 1 <=n <=8000 | CHAR(n) |
VARCHAR(n) | Teckensträng med variabel längd, 1 <=n <=8000 | VARCHAR(n) |
VARCHAR(max) | Teckensträng med variabel längd, <=2 GB | TEXT |
VARBINÄR(n) | Bytesträng med variabel längd , 1 <=n <=8000 | BYTEA |
VARBINÄR(max) | Bytesträng med variabel längd, <=2 GB | BYTEA |
NVARCHAR(n) | Unicode UCS-2-sträng med variabel längd | VARCHAR(n) |
NVARCHAR(max) | Unicode UCS-2-data med variabel längd, <=2 GB | TEXT |
TEXT | Teckendata med variabel längd, <=2 GB | TEXT |
NTEXT | Unicode UCS-2-data med variabel längd, <=2 GB | TEXT |
DUBBEL PRECISION | Dubbel precision med flyttal | DUBBEL PRECISION |
FLYTTA(p) | Flyttalsnummer | DUBBEL PRECISION |
INTEGER | 32-bitars heltal | INTEGER |
NUMERIC(p,s) | Fast punktnummer | NUMERISK(p,s) |
DATUM | Datum inkluderar år, månad och dag | DATE |
DATETIME | Datum och tid med bråkdel | TIMESTAMP(3) |
DATETIME2(p) | Datum och tid med bråkdel | TIMESTAMP(n) |
DATETIMEOFFSET(p) | Datum och tid med bråktal och tidszon | TIDSSTÄMPEL(p) MED TIDZON |
SMALLDATETIME | Datum och tid | TIMESTAMP(0) |
TINYINT | 8-bitars osignerat heltal, 0 till 255 | SMALLINT |
UNIQUEIDENTIFIER | 16 byte GUID(UUID)-data | CHAR(16) |
ROWVERSION | Automatiskt uppdaterad binär data | BYTEA |
SMÅPENGAR | 32-bitars valutabelopp | PENGAR |
BILD | Binära data med variabel längd, <=2 GB | BYTEA |
Inkompatibiliteter i MS SQL Server och PostgreSQL
Det finns många inkompatibiliteter i MS SQL Server och PostgreSQL, du kan se några av dem här. Du kan automatisera dem genom att skapa tillägg så att du kan använda MS SQL Server-funktionen som den är i PostgreSQL och du kan spara tid.
DATEPART
DATEPART måste ersättas av DATE_PART i PostgreSQL.
Exempel
MS SQL:
DATEPART( datepart , date )
PostgreSQL:
date_part( text , timestamp )
date_part( text , interval )
ISNULL
ISNULL-funktionen måste ersättas av COALESCE-funktionen i PostgreSQL.
Exempel
MS SQL Server:
ISNULL(exp, replacement)
PostgreSQL:
COALESCE(exp, replacement)
MELLANSLAG
SPACE-funktionen i MS SQL Server måste ersättas av REPEAT-funktionen i PostgreSQL.
Exempel
MS SQL Server:
SPACE($n)
Där $n är antalet blanksteg som ska returneras.
PostgreSQL:
REPEAT(‘ ’, $n)
DATEADD
PostgreSQL tillhandahåller inte DATEADD-funktion som liknar MS SQL Server, du kan använda aritmetik för datum och tid med intervallliteraler för att få samma resultat.
Exempel
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’;
Strängsammansättning
MS SQL Server använder '+' för strängsammansättning medan PostgreSQL använder '||' för detsamma.
Exempel
MS SQL Server:
SELECT FirstName + LastName FROM employee;
PostgreSQL:
SELECT FirstName || LastName FROM employee;
CHARINDEX
Det finns CHARINDEX-funktion i PostgreSQL. Du kan ersätta denna funktion med PostgreSQL motsvarande POSITION-funktion.
Exempel
MS SQL Server:
SELECT CHARINDEX('our', 'resource');
PostgreSQL:
SELECT POSITION('our' in 'resource');
GETDATE
GETDATE-funktionen returnerar aktuellt datum och tid. Det finns ingen GETDATE-funktion i PostgreSQL, men det finns NOW()-funktion för samma ändamål. Om det finns flera förekomster av GETDATE-funktionen kan du automatisera dem med tillägg. Kontrollera hur du skapar moduler med tillägg.
Exempel
MS SQL Server:
SELECT GETDATE();
PostgreSQL:
SELECT NOW();
Verktyg
Du kan använda några verktyg för att migrera MS SQL Server-databas till PostgreSQL. Testa verktyget innan du använder det.
-
Pgloader
Du kan använda verktyget pgloader för att migrera MS SQL-databas till PostgreSQL. Kommandon i pgloader laddar data från MS SQL-databasen. Pgloader stöder automatisk upptäckt av schemat, inklusive uppbyggnad av index, primärnyckel och främmande nycklar.
Pgloader tillhandahåller olika casting-regler som kan konvertera MS SQL-datatypen till en PostgreSQL-datatyp.
-
Sqlserver2pgsql
Detta är ett annat migreringsverktyg med öppen källkod för att konvertera Microsoft SQL Server-databas till en PostgreSQL-databas, så automatiskt som möjligt. Sqlserver2pgsql är skrivet i Perl.
Verktyget Sqlserver2pgsql gör två saker:
- Den konverterar ett SQL Server-schema till ett PostgreSQL-schema
- Den kan producera en Pentaho Data Integrator (Kettle) jib för att migrera all data från SQL Server till PostgreSQL. Detta är en valfri del.
Test
Att testa applikationen och den migrerade databasen är mycket viktigt eftersom vissa av funktionerna är desamma i båda databaserna, men beteendet är annorlunda.
Några vanliga scenarier måste kontrolleras:
- Kontrollera om alla databasobjekt är korrekt konverterade eller inte.
- Kontrollera hur alla funktioner i DML fungerar korrekt eller inte.
- Läs in exempeldata i båda databaserna och kontrollera resultatet av alla DML-frågor i båda databaserna. Resultatet av alla SQL bör vara detsamma.
- Kontrollera prestandan för DML och förbättra den vid behov.