sql >> Databasteknik >  >> RDS >> PostgreSQL

Migrera från MSSQL till PostgreSQL - Vad du bör veta

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?

  1. 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.
  2. 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.
  3. Flexibel licensiering med öppen källkod och enkel tillgänglighet från offentliga molnleverantörer som AWS, Google moln etc.
  4. 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
Ladda ner Whitepaper Today PostgreSQL Management &Automation med ClusterControlLäs om vad du behöver veta för att distribuera, övervaka, hantera och skala PostgreSQLDladda Whitepaper

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.

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

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

    1. Den konverterar ett SQL Server-schema till ett PostgreSQL-schema
    2. 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.

  1. Ignorerar tidszoner helt och hållet i Rails och PostgreSQL

  2. convert_tz returnerar null

  3. Hur man använder vyer i en MySQL-databas

  4. MariaDB LOCALTIME() Förklarad