Zoals u wellicht weet, is Microsoft SQL Server een zeer populaire RDBMS met zeer restrictieve licenties en hoge eigendomskosten als de database van aanzienlijke omvang is of door een aanzienlijk aantal klanten wordt gebruikt. Het biedt een zeer gebruiksvriendelijke interface en is gemakkelijk te leren. Dit heeft geresulteerd in een groot aantal geïnstalleerde gebruikers.
PostgreSQL is 's werelds meest geavanceerde open source database. De PostgreSQL-gemeenschap is erg sterk en verbetert voortdurend bestaande functies en implementeert nieuwe functies. Volgens de populariteitsranglijst van db-engine was PostgreSQL de DBMS van het jaar 2017.
Waarom migreren van MS SQL Server naar PostgreSQL?
- MS SQL Server is een eigen database van Microsoft, terwijl PostgreSQL is ontwikkeld en onderhouden door een wereldwijde gemeenschap van open source-ontwikkelaars. Als de kosten een probleem zijn, moet u zeker voor PostgreSQL gaan. Je kunt de prijzen hier bekijken.
- PostgreSQL is een cross-platform database-engine en is beschikbaar voor Windows, Mac, Solaris, FreeBSD en Linux, terwijl SQL Server alleen op het Windows-besturingssysteem draait. Zoals u wellicht weet, is PostgreSQL open source en volledig gratis, terwijl de kosten van MSSQL Server afhankelijk zijn van het aantal gebruikers en de databasegrootte.
- Flexibele open source-licenties en gemakkelijke beschikbaarheid van openbare cloudproviders zoals AWS, Google cloud enz.
- Profiteer van open source-add-ons om de prestaties te verbeteren.
Wat u moet weten
Hoewel zowel de Microsoft SQL Server-database als de PostgreSQL-database ANSI-SQL-compatibel zijn, zijn er nog steeds verschillen tussen hun SQL-syntaxis, gegevenstypen, hoofdlettergevoeligheid, en het maakt het overbrengen van gegevens niet zo triviaal.
Begrijp vóór de migratie de verschillen tussen MSSQL en PostgreSQL. Er zijn veel functies in beide databases, dus u zou het gedrag van die functies/functies in MSSQL en PostgreSQL moeten kennen. Controleer enkele belangrijke verschillen die u vóór de migratie moet kennen.
Gegevenstypetoewijzing
Sommige gegevenstypen van MSSQL komen niet rechtstreeks overeen met PostgreSQL-gegevenstypen, dus u moet deze wijzigen in het corresponderende PostgreSQL-gegevenstype.
Controleer de onderstaande tabel.
Microsoft SQL Server | PostgreSQL | |
---|---|---|
BIGINT | 64-bits geheel getal | GROOT |
BINAIR(n) | Bytetekenreeks met vaste lengte | BYTEA |
BIT | 1, 0 of NULL | BOOLEAN |
CHAR(n) | Tekenreeks met vaste lengte, 1 <=n <=8000 | CHAR(n) |
VARCHAR(n) | Tekenreeks met variabele lengte, 1 <=n <=8000 | VARCHAR(n) |
VARCHAR(max) | Tekenreeks met variabele lengte, <=2GB | TEKST |
VARBINARY(n) | Variabele lengte byte string , 1 <=n <=8000 | BYTEA |
VARBINARY(max) | Byte-tekenreeks met variabele lengte, <=2GB | BYTEA |
NVARCHAR(n) | Variabele lengte Unicode UCS-2 string | VARCHAR(n) |
NVARCHAR(max) | Variabele lengte Unicode UCS-2 data, <=2GB | TEKST |
TEKST | Tekengegevens met variabele lengte, <=2GB | TEKST |
NTEXT | Variabele lengte Unicode UCS-2 data, <=2GB | TEKST |
DUBBELE PRECISIE | Drijvende-kommagetal met dubbele precisie | DUBBELE PRECISIE |
FLOAT(p) | Drijvende kommanummer | DUBBELE PRECISIE |
INTEGER | 32-bits geheel getal | INTEGER |
NUMERIEK(p,s) | Vast puntnummer | NUMERIEK(p,s) |
DATUM | Datum omvat jaar, maand en dag | DATUM |
DATETIME | Datum en tijd met breuk | TIMESTAMP(3) |
DATETIME2(p) | Datum en tijd met breuk | TIMESTAMP(n) |
DATETIMEOFFSET(p) | Datum en tijd met breuk en tijdzone | TIMESTAMP(p) MET TIJDZONE |
SMALLDATETIME | Datum en tijd | TIMESTAMP(0) |
TINYINT | 8 bit geheel getal zonder teken, 0 tot 255 | KLEIN |
UNIEK IDENTIFICEERDER | 16 byte GUID(UUID)-gegevens | CHAR(16) |
ROWVERSIE | Automatisch bijgewerkte binaire gegevens | BYTEA |
KLEIN GELD | 32 bit valutabedrag | GELD |
BEELD | Binaire gegevens met variabele lengte, <=2GB | BYTEA |
Incompatibiliteiten in MS SQL Server en PostgreSQL
Er zijn veel incompatibiliteiten aanwezig in MS SQL Server en PostgreSQL, u kunt er hier enkele bekijken. U kunt ze automatiseren door extensies te maken, zodat u de MS SQL Server-functie kunt gebruiken zoals deze is in PostgreSQL en u tijd kunt besparen.
DATEPART
DATEPART moet worden vervangen door DATE_PART in PostgreSQL.
Voorbeeld
MS SQL:
DATEPART( datepart , date )
PostgreSQL:
date_part( text , timestamp )
date_part( text , interval )
ISNULL
De ISNULL-functie moet worden vervangen door de COALESCE-functie in PostgreSQL.
Voorbeeld
MS SQL Server:
ISNULL(exp, replacement)
PostgreSQL:
COALESCE(exp, replacement)
RUIMTE
De SPACE-functie in MS SQL Server moet worden vervangen door de REPEAT-functie in PostgreSQL.
Voorbeeld
MS SQL Server:
SPACE($n)
Waar $n het aantal spaties is dat moet worden geretourneerd.
PostgreSQL:
REPEAT(‘ ’, $n)
DATEADD
PostgreSQL biedt geen DATEADD-functie die vergelijkbaar is met MS SQL Server, u kunt datetime-berekeningen gebruiken met intervalliteralen om dezelfde resultaten te krijgen.
Voorbeeld
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’;
Aaneenschakeling van tekenreeksen
MS SQL Server gebruikt '+' voor String Concatenation, terwijl PostgreSQL '||' voor hetzelfde gebruikt.
Voorbeeld
MS SQL Server:
SELECT FirstName + LastName FROM employee;
PostgreSQL:
SELECT FirstName || LastName FROM employee;
CHARINDEX
Er is een CHARINDEX-functie in PostgreSQL. U kunt deze functie vervangen door een PostgreSQL-equivalente POSITION-functie.
Voorbeeld
MS SQL Server:
SELECT CHARINDEX('our', 'resource');
PostgreSQL:
SELECT POSITION('our' in 'resource');
GETDATUM
GETDATE-functie retourneert de huidige datum en tijd. Er is geen GETDATE-functie in PostgreSQL, maar er is een NOW()-functie voor hetzelfde doel. Als de GETDATE-functie meerdere keren voorkomt, kunt u deze automatiseren met extensie. Controleer hoe u modules kunt maken met extensie.
Voorbeeld
MS SQL Server:
SELECT GETDATE();
PostgreSQL:
SELECT NOW();
Extra
U kunt enkele hulpprogramma's gebruiken om de MS SQL Server-database naar PostgreSQL te migreren. Test de tool voordat je hem gebruikt.
-
Pglader
U kunt de pgloader-tool gebruiken om de MS SQL-database naar PostgreSQL te migreren. De commando's in de pglader laden de gegevens uit de MS SQL-database. Pglader ondersteunt automatische detectie van het schema, inclusief het bouwen van de indexen, primaire sleutel en externe sleutelbeperkingen.
Pglader biedt verschillende castingregels die het MS SQL-gegevenstype kunnen converteren naar een PostgreSQL-gegevenstype.
-
Sqlserver2pgsql
Dit is een andere open source migratietool om de Microsoft SQL Server-database zo automatisch mogelijk om te zetten in een PostgreSQL-database. Sqlserver2pgsql is geschreven in Perl.
De tool Sqlserver2pgsql doet twee dingen:
- Het converteert een SQL Server-schema naar een PostgreSQL-schema
- Het kan een Pentaho Data Integrator (Kettle) jib produceren om alle gegevens van SQL Server naar PostgreSQL te migreren. Dit is een optioneel onderdeel.
Testen
Het testen van de applicatie en de gemigreerde database is erg belangrijk omdat sommige functies in beide databases hetzelfde zijn, maar het gedrag is anders.
Enkele veelvoorkomende scenario's moeten worden gecontroleerd:
- Controleer of alle database-objecten correct zijn geconverteerd of niet.
- Controleer of alle functies in DML correct werken of niet.
- Laad voorbeeldgegevens in beide databases en controleer het resultaat van alle DML-query's in beide databases. Het resultaat van alle SQL's zou hetzelfde moeten zijn.
- Controleer de prestaties van de DML en verbeter deze indien nodig.