PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Migration von MSSQL zu PostgreSQL – Was Sie wissen sollten

Wie Sie vielleicht wissen, ist Microsoft SQL Server ein sehr beliebtes RDBMS mit sehr restriktiver Lizenzierung und hohen Betriebskosten, wenn die Datenbank eine beträchtliche Größe hat oder von einer beträchtlichen Anzahl von Clients verwendet wird. Es bietet eine sehr benutzerfreundliche Oberfläche und ist leicht zu erlernen. Dies hat zu einer großen installierten Benutzerbasis geführt.

PostgreSQL ist die weltweit fortschrittlichste Open-Source-Datenbank. Die PostgreSQL-Community ist sehr stark und verbessert kontinuierlich bestehende Funktionen und implementiert neue Funktionen. PostgreSQL war laut DB-Engine-Beliebtheitsrang das DBMS des Jahres 2017.

Warum von MS SQL Server zu PostgreSQL migrieren?

  1. MS SQL Server ist eine proprietäre Datenbank von Microsoft, während PostgreSQL von einer globalen Gemeinschaft von Open-Source-Entwicklern entwickelt und gepflegt wird. Wenn die Kosten ein Problem sind, sollten Sie sich definitiv für PostgreSQL entscheiden. Sie können die Preise hier überprüfen.
  2. PostgreSQL ist eine plattformübergreifende Datenbank-Engine und ist für Windows, Mac, Solaris, FreeBSD und Linux verfügbar, während SQL Server nur auf Windows-Betriebssystemen läuft. Wie Sie vielleicht wissen, ist PostgreSQL Open Source und völlig kostenlos, während die Kosten für MSSQL Server von der Anzahl der Benutzer und der Datenbankgröße abhängen.
  3. Flexible Open-Source-Lizenzierung und einfache Verfügbarkeit von öffentlichen Cloud-Anbietern wie AWS, Google Cloud usw.
  4. Profitieren Sie von Open-Source-Add-ons, um die Leistung zu verbessern.

Was Sie wissen sollten

Obwohl sowohl die Microsoft SQL Server-Datenbank als auch die PostgreSQL-Datenbank ANSI-SQL-kompatibel sind, gibt es dennoch Unterschiede zwischen ihrer SQL-Syntax, den Datentypen und der Berücksichtigung der Groß-/Kleinschreibung, was die Übertragung von Daten nicht so trivial macht.

Machen Sie sich vor der Migration mit den Unterschieden zwischen MSSQL und PostgreSQL vertraut. Es gibt viele Features in beiden Datenbanken, daher sollten Sie das Verhalten dieser Features/Funktionen in MSSQL und PostgreSQL kennen. Bitte überprüfen Sie einige wichtige Unterschiede, die Sie vor der Migration kennen sollten.

Datentypzuordnung

Einige der Datentypen von MSSQL stimmen nicht direkt mit PostgreSQL-Datentypen überein, daher müssen Sie sie in den entsprechenden PostgreSQL-Datentyp ändern.

Bitte überprüfen Sie die folgende Tabelle.

Microsoft SQL Server PostgreSQL
BIGINT 64-Bit-Ganzzahl GROSS
BINARY(n) Byte-String mit fester Länge BYTEA
BIT 1, 0 oder NULL BOOLEAN
CHAR(n) Zeichenkette mit fester Länge, 1 <=n <=8000 CHAR(n)
VARCHAR(n) Zeichenfolge variabler Länge, 1 <=n <=8000 VARCHAR(n)
VARCHAR(max) Zeichenfolge variabler Länge, <=2 GB TEXT
VARBINARY(n) Byte-String variabler Länge, 1 <=n <=8000 BYTEA
VARBINARY(max) Byte-String mit variabler Länge, <=2 GB BYTEA
NVARCHAR(n) Unicode UCS-2-String mit variabler Länge VARCHAR(n)
NVARCHAR(max) Unicode UCS-2-Daten variabler Länge, <=2 GB TEXT
TEXT Zeichendaten variabler Länge, <=2 GB TEXT
NTEXT Unicode UCS-2-Daten variabler Länge, <=2 GB TEXT
DOPPELTE PRÄZISION Gleitkommazahl mit doppelter Genauigkeit DOPPELTE PRÄZISION
FLOAT(p) Gleitkommazahl DOPPELTE PRÄZISION
INTEGER 32-Bit-Ganzzahl INTEGER
NUMERIC(p,s) Festkommazahl NUMERIC(p,s)
DATUM Datum umfasst Jahr, Monat und Tag DATUM
DATETIME Datum und Uhrzeit mit Bruch ZEITSTEMPEL(3)
DATETIME2(p) Datum und Uhrzeit mit Bruch TIMESTAMP(n)
DATETIMEOFFSET(p) Datum und Uhrzeit mit Bruchteil und Zeitzone ZEITSTEMPEL(p) MIT ZEITZONE
SMALLDATETIME Datum und Uhrzeit TIMESTAMP(0)
TINYINT 8-Bit-Ganzzahl ohne Vorzeichen, 0 bis 255 SMALLINT
UNIQUEIDENTIFIER 16-Byte-GUID(UUID)-Daten CHAR(16)
Zeilenversion Automatisch aktualisierte Binärdaten BYTEA
KLEINES GELD 32-Bit-Währungsbetrag GELD
BILD Binärdaten variabler Länge, <=2 GB BYTEA
Laden Sie noch heute das Whitepaper PostgreSQL-Verwaltung und -Automatisierung mit ClusterControl herunterErfahren Sie, was Sie wissen müssen, um PostgreSQL bereitzustellen, zu überwachen, zu verwalten und zu skalierenLaden Sie das Whitepaper herunter

Inkompatibilitäten in MS SQL Server und PostgreSQL

Es gibt viele Inkompatibilitäten in MS SQL Server und PostgreSQL, einige davon können Sie hier sehen. Sie können sie automatisieren, indem Sie Erweiterungen erstellen, sodass Sie die MS SQL Server-Funktion wie in PostgreSQL verwenden und Zeit sparen können.

DATUMTEIL

DATEPART muss in PostgreSQL durch DATE_PART ersetzt werden.

Beispiel

MS SQL:

DATEPART( datepart , date )

PostgreSQL:

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

ISNULL

Die ISNULL-Funktion muss in PostgreSQL durch die COALESCE-Funktion ersetzt werden.

Beispiel

MS SQL-Server:

ISNULL(exp, replacement)

PostgreSQL:

COALESCE(exp, replacement)

LEERZEICHEN

Die SPACE-Funktion in MS SQL Server muss durch die REPEAT-Funktion in PostgreSQL ersetzt werden.

Beispiel

MS SQL-Server:

SPACE($n)

Wobei $n die Anzahl der zurückzugebenden Leerzeichen ist.

PostgreSQL:

REPEAT(‘ ’, $n)

DATUM HINZUFÜGEN

PostgreSQL bietet keine DATEADD-Funktion ähnlich wie MS SQL Server, Sie können Datumszeit-Arithmetik mit Intervallliteralen verwenden, um die gleichen Ergebnisse zu erhalten.

Beispiel

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

String-Verkettung

MS SQL Server verwendet „+“ für die Zeichenfolgenverkettung, während PostgreSQL „||“ für dasselbe verwendet.

Beispiel

MS SQL-Server:

SELECT FirstName + LastName FROM employee;

PostgreSQL:

SELECT FirstName || LastName FROM employee;

CHARINDEX

Es gibt eine CHARINDEX-Funktion in PostgreSQL. Sie können diese Funktion durch die PostgreSQL-äquivalente POSITION-Funktion ersetzen.

Beispiel

MS SQL-Server:

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

PostgreSQL:

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

GETDATE

Die GETDATE-Funktion gibt das aktuelle Datum und die Uhrzeit zurück. Es gibt keine GETDATE-Funktion in PostgreSQL, aber es gibt die NOW()-Funktion für denselben Zweck. Wenn die GETDATE-Funktion mehrfach vorkommt, können Sie sie mithilfe der Erweiterung automatisieren. Bitte prüfen Sie, wie Module mit der Erweiterung erstellt werden.

Beispiel

MS SQL-Server:

SELECT GETDATE();

PostgreSQL:

SELECT NOW();

Werkzeuge

Sie können einige Tools verwenden, um die MS SQL Server-Datenbank nach PostgreSQL zu migrieren. Bitte testen Sie das Tool, bevor Sie es verwenden.

  1. Pgloader

    Sie können das pgloader-Tool verwenden, um die MS SQL-Datenbank nach PostgreSQL zu migrieren. Die Befehle im pgloader laden die Daten aus der MS SQL-Datenbank. Pgloader unterstützt die automatische Erkennung des Schemas, einschließlich Erstellung der Indizes, Primärschlüssel- und Fremdschlüsselbeschränkungen.

    Pgloader bietet verschiedene Casting-Regeln, die den MS SQL-Datentyp in einen PostgreSQL-Datentyp umwandeln können.

  2. Sqlserver2pgsql

    Dies ist ein weiteres Open-Source-Migrationstool, um die Microsoft SQL Server-Datenbank so automatisch wie möglich in eine PostgreSQL-Datenbank zu konvertieren. Sqlserver2pgsql ist in Perl geschrieben.

    Das Sqlserver2pgsql-Tool macht zwei Dinge:

    1. Es konvertiert ein SQL Server-Schema in ein PostgreSQL-Schema
    2. Es kann einen Pentaho Data Integrator (Kettle)-Jib erzeugen, um alle Daten von SQL Server nach PostgreSQL zu migrieren. Dies ist ein optionaler Teil.

Testen

Das Testen der Anwendung und der migrierten Datenbank ist sehr wichtig, da einige der Funktionen in beiden Datenbanken gleich sind, das Verhalten jedoch unterschiedlich ist.

Einige gängige Szenarien müssen überprüft werden:

  • Überprüfen Sie, ob alle Datenbankobjekte korrekt konvertiert wurden oder nicht.
  • Überprüfen Sie, ob das Verhalten aller Funktionen in DML korrekt funktioniert oder nicht.
  • Laden Sie Beispieldaten in beide Datenbanken und überprüfen Sie das Ergebnis aller DML-Abfragen in beiden Datenbanken. Das Ergebnis aller SQLs sollte gleich sein.
  • Überprüfen Sie die Leistung der DML und verbessern Sie sie gegebenenfalls.