sql >> Database >  >> RDS >> PostgreSQL

Migreren van MSSQL naar PostgreSQL - wat u moet weten

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?

  1. 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.
  2. 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.
  3. Flexibele open source-licenties en gemakkelijke beschikbaarheid van openbare cloudproviders zoals AWS, Google cloud enz.
  4. 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
Download de whitepaper vandaag PostgreSQL-beheer en -automatisering met ClusterControlLees wat u moet weten om PostgreSQL te implementeren, bewaken, beheren en schalenDownload de whitepaper

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.

  1. 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.

  2. 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:

    1. Het converteert een SQL Server-schema naar een PostgreSQL-schema
    2. 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.

  1. Maak verbinding met externe MySQL-server met SSL vanuit PHP

  2. 3 gebieden die baat zullen hebben bij het gebruik van een SQL Server Performance Monitoring Tool

  3. Veranderingen in de Oracle-interface

  4. Standaardwaarden van parameters parseren met PowerShell - Deel 1