sql >> Databáze >  >> RDS >> PostgreSQL

Migrace z MSSQL na PostgreSQL - Co byste měli vědět

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?

  1. 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.
  2. 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.
  3. Flexibilní open source licencování a snadná dostupnost od veřejných poskytovatelů cloudu, jako je AWS, Google cloud atd.
  4. 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
Stáhněte si Whitepaper Today Správa a automatizace PostgreSQL s ClusterControlZjistěte, co potřebujete vědět k nasazení, monitorování, správě a škálování PostgreSQLStáhněte si Whitepaper

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.

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

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

    1. Převádí schéma SQL Serveru na schéma PostgreSQL
    2. 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.

  1. MYSQL importuje data z csv pomocí LOAD DATA INFILE

  2. Úvod do referenčních kurzorů PL/SQL v databázi Oracle

  3. Jak najít položku seznamu na zadané pozici v SQL Server

  4. Jak dynamicky transponovat řádky do sloupců v MySQL