Jak možná víte, Microsoft SQL Server je velmi populární RDBMS s vysoce restriktivním licencováním a vysokými náklady na vlastnictví, pokud má databáze značnou velikost nebo ji používá významný počet klientů. Poskytuje velmi uživatelsky přívětivé rozhraní a snadno se učí. To vedlo k velké instalované uživatelské základně.
PostgreSQL je nejpokročilejší open source databáze na světě. PostgreSQL komunita je velmi silná a neustále zlepšuje stávající funkce a implementuje nové funkce. Podle žebříčku oblíbenosti db-engine byl PostgreSQL DBMS roku 2017.
Proč migrovat z MS SQL Server na PostgreSQL?
- MS SQL Server je proprietární databáze od společnosti Microsoft, zatímco PostgreSQL je vyvíjen a udržován globální komunitou open source vývojářů. Pokud je problémem cena, rozhodně byste měli jít s PostgreSQL. Ceny si můžete ověřit zde.
- PostgreSQL je multiplatformní databázový stroj a je dostupný pro Windows, Mac, Solaris, FreeBSD a Linux, zatímco SQL Server běží pouze na operačním systému Windows. Jak možná víte, PostgreSQL je open source a zcela zdarma, zatímco náklady na MSSQL Server závisí na počtu uživatelů a velikosti databáze.
- Flexibilní open source licencování a snadná dostupnost od veřejných poskytovatelů cloudu, jako je AWS, Google cloud atd.
- Využijte výhody open source doplňků ke zlepšení výkonu.
Co byste měli vědět
Přestože databáze Microsoft SQL Server i databáze PostgreSQL jsou kompatibilní s ANSI-SQL, stále existují rozdíly mezi jejich syntaxí SQL, datovými typy, rozlišováním malých a velkých písmen a přenos dat není tak triviální.
Před migrací pochopte rozdíly mezi MSSQL a PostgreSQL. V obou databázích je mnoho funkcí, takže byste měli znát chování těchto funkcí/funkcí v MSSQL a PostgreSQL. Před migrací zkontrolujte některé důležité rozdíly, které byste měli znát.
Mapování datových typů
Některé datové typy MSSQL se přímo neshodují s datovými typy PostgreSQL, takže je musíte změnit na odpovídající datový typ PostgreSQL.
Zkontrolujte prosím níže uvedenou tabulku.
Microsoft SQL Server | PostgreSQL | |
---|---|---|
VELKÝ | 64bitové celé číslo | VELKÝ |
BINARY(n) | Bajtový řetězec s pevnou délkou | BYTEA |
BIT | 1, 0 nebo NULL | BOOLEAN |
CHAR(n) | Znakový řetězec s pevnou délkou, 1 <=n <=8000 | CHAR(n) |
VARCHAR(n) | Řetězec znaků s proměnnou délkou, 1 <=n <=8000 | VARCHAR(n) |
VARCHAR(max) | Řetězec znaků s proměnnou délkou, <=2 GB | TEXT |
VARBINARY(n) | Bajtový řetězec proměnné délky, 1 <=n <=8000 | BYTEA |
VARBINARY(max) | Bajtový řetězec proměnné délky, <=2 GB | BYTEA |
NVARCHAR(n) | Řetězec Unicode UCS-2 s proměnnou délkou | VARCHAR(n) |
NVARCHAR(max) | Data Unicode UCS-2 s variabilní délkou, <=2 GB | TEXT |
TEXT | Data znaků s proměnnou délkou, <=2 GB | TEXT |
NTEXT | Data Unicode UCS-2 s variabilní délkou, <=2 GB | TEXT |
DVOJNÁSOBNÁ PŘESNOST | Číslo s plovoucí desetinnou čárkou s dvojitou přesností | DVOJNÁSOBNÁ PŘESNOST |
FLOAT(p) | Číslo s plovoucí desetinnou čárkou | DVOJNÁSOBNÁ PŘESNOST |
INTEGER | 32bitové celé číslo | INTEGER |
NUMERIC(p,s) | Pevné číslo bodu | NUMERIC(p,s) |
DATUM | Datum zahrnuje rok, měsíc a den | DATUM |
DATETIME | Datum a čas se zlomkem | TIMESTAMP(3) |
DATETIME2(p) | Datum a čas se zlomkem | TIMESTAMP(n) |
DATETIMEOFFSET(p) | Datum a čas se zlomkem a časovým pásmem | TIMESTAMP(p) S ČASOVÝM PÁSEM |
SMALLDATETIME | Datum a čas | TIMESTAMP(0) |
TINYINT | 8bitové celé číslo bez znaménka, 0 až 255 | SMALLINT |
UNIQUEIDENTIFIER | 16bajtová data GUID (UUID) | CHAR(16) |
ROWVERSION | Automaticky aktualizovaná binární data | BYTEA |
MALÉ PENÍZE | Částka 32bitové měny | PENÍZE |
OBRÁZEK | Binární data s proměnnou délkou, <=2 GB | BYTEA |
Nekompatibilita v MS SQL Server a PostgreSQL
V MS SQL Server a PostgreSQL existuje mnoho nekompatibilit, některé z nich můžete vidět zde. Můžete je automatizovat vytvořením rozšíření, abyste mohli používat funkci MS SQL Server tak, jak je v PostgreSQL, a ušetřit tak svůj čas.
DATEPART
DATEPART musí být nahrazen DATE_PART v PostgreSQL.
Příklad
MS SQL:
DATEPART( datepart , date )
PostgreSQL:
date_part( text , timestamp )
date_part( text , interval )
ISNULL
Funkce ISNULL musí být nahrazena funkcí COALESCE v PostgreSQL.
Příklad
MS SQL Server:
ISNULL(exp, replacement)
PostgreSQL:
COALESCE(exp, replacement)
PROSTOR
Funkce SPACE v MS SQL Server musí být nahrazena funkcí REPEAT v PostgreSQL.
Příklad
MS SQL Server:
SPACE($n)
Kde $n je počet mezer, které mají být vráceny.
PostgreSQL:
REPEAT(‘ ’, $n)
DATEADD
PostgreSQL neposkytuje funkci DATEADD podobnou MS SQL Server, můžete použít aritmetiku data a času s intervalovými literály, abyste získali stejné výsledky.
Příklad
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’;
Zřetězení řetězců
MS SQL Server používá „+“ pro zřetězení řetězců, zatímco PostgreSQL pro totéž používá „||“.
Příklad
MS SQL Server:
SELECT FirstName + LastName FROM employee;
PostgreSQL:
SELECT FirstName || LastName FROM employee;
CHARINDEX
V PostgreSQL je funkce CHARINDEX. Tuto funkci můžete nahradit funkcí POSITION ekvivalentní PostgreSQL.
Příklad
MS SQL Server:
SELECT CHARINDEX('our', 'resource');
PostgreSQL:
SELECT POSITION('our' in 'resource');
ZÍSKAT DATUM
Funkce GETDATE vrací aktuální datum a čas. V PostgreSQL není žádná funkce GETDATE, ale existuje funkce NOW() pro stejný účel. Pokud existuje více výskytů funkce GETDATE, můžete je automatizovat pomocí rozšíření. Zkontrolujte prosím, jak vytvořit moduly pomocí rozšíření.
Příklad
MS SQL Server:
SELECT GETDATE();
PostgreSQL:
SELECT NOW();
Nástroje
Pro migraci databáze MS SQL Server do PostgreSQL můžete použít některé nástroje. Před použitím nástroj otestujte.
-
Pgloader
K migraci databáze MS SQL do PostgreSQL můžete použít nástroj pgloader. Příkazy v pgloaderu načítají data z MS SQL databáze. Pgloader podporuje automatické zjišťování schématu, včetně sestavení indexů, omezení primárního klíče a cizích klíčů.
Pgloader poskytuje různá pravidla castingu, která dokážou převést datový typ MS SQL na datový typ PostgreSQL.
-
Sqlserver2pgsql
Toto je další nástroj pro migraci s otevřeným zdrojovým kódem pro převod databáze Microsoft SQL Server na databázi PostgreSQL, pokud možno automaticky. Sqlserver2pgsql je napsán v Perlu.
Nástroj Sqlserver2pgsql dělá dvě věci:
- Převádí schéma SQL Serveru na schéma PostgreSQL
- Může vytvořit jib Pentaho Data Integrator (Kettle) pro migraci všech dat ze serveru SQL Server do PostgreSQL. Toto je volitelná část.
Testování
Testování aplikace a migrované databáze je velmi důležité, protože některé funkce jsou v obou databázích stejné, ale chování se liší.
Je třeba zkontrolovat některé běžné scénáře:
- Zkontrolujte, zda jsou všechny databázové objekty správně převedeny nebo ne.
- Zkontrolujte, zda chování všech funkcí v DML funguje správně nebo ne.
- Načtěte ukázková data do obou databází a zkontrolujte výsledek všech dotazů DML v obou databázích. Výsledek všech SQL by měl být stejný.
- Zkontrolujte výkon DML a v případě potřeby jej vylepšete.