Както може би знаете, Microsoft SQL Server е много популярна RDBMS със силно ограничително лицензиране и висока цена на собственост, ако базата данни е със значителен размер или се използва от значителен брой клиенти. Той предоставя много удобен за потребителя интерфейс и лесен за научаване. Това доведе до голяма инсталирана потребителска база.
PostgreSQL е най-модерната база данни с отворен код в света. PostgreSQL общността е много силна и непрекъснато подобрява съществуващите функции и внедрява нови функции. Според класацията на популярност на db-engine PostgreSQL беше СУБД на 2017 г.
Защо да мигрирате от MS SQL Server към PostgreSQL?
- MS SQL Server е собствена база данни от Microsoft, докато PostgreSQL се разработва и поддържа от глобална общност от разработчици с отворен код. Ако цената е проблем, тогава определено трябва да използвате PostgreSQL. Можете да проверите цените тук.
- PostgreSQL е система за база данни за различни платформи и е достъпна за Windows, Mac, Solaris, FreeBSD и Linux, докато SQL Server работи само на операционна система Windows. Както може би знаете, PostgreSQL е с отворен код и напълно безплатен, докато цената на MSSQL Server зависи от броя на потребителите и размера на базата данни.
- Гъвкаво лицензиране с отворен код и лесна наличност от публични доставчици на облак като AWS, облак на Google и др.
- Възползвайте се от добавки с отворен код, за да подобрите производителността.
Какво трябва да знаете
Въпреки че както базата данни на Microsoft SQL Server, така и базата данни PostgreSQL са съвместими с ANSI-SQL, все още има разлики между техния SQL синтаксис, типове данни, чувствителност към малки и големи букви и това прави прехвърлянето на данни не толкова тривиално.
Преди миграцията разберете разликите между MSSQL и PostgreSQL. Има много функции и в двете бази данни, така че трябва да знаете поведението на тези функции/функции в MSSQL и PostgreSQL. Моля, проверете някои важни разлики, които трябва да знаете преди миграцията.
Съпоставяне на типове данни
Някои от типовете данни на MSSQL не съвпадат директно с типовете данни на PostgreSQL, така че трябва да ги промените на съответния тип данни на PostgreSQL.
Моля, проверете таблицата по-долу.
Microsoft SQL Server | PostgreSQL | |
---|---|---|
ГОЛЯМ | 64-битово цяло число | BIGINT |
БИНАРЕН(n) | Байтов низ с фиксирана дължина | BYTEA |
BIT | 1, 0 или NULL | БУЛЕВО |
CHAR(n) | Низ с фиксирана дължина, 1 <=n <=8000 | CHAR(n) |
VARCHAR(n) | Символен низ с променлива дължина, 1 <=n <=8000 | VARCHAR(n) |
VARCHAR(макс.) | Символен низ с променлива дължина, <=2GB | ТЕКСТ |
VARBINARY(n) | Байтов низ с променлива дължина, 1 <=n <=8000 | BYTEA |
VARBINARY(max) | Байтов низ с променлива дължина, <=2GB | BYTEA |
NVARCHAR(n) | Уникод UCS-2 низ с променлива дължина | VARCHAR(n) |
NVARCHAR(макс.) | Данни Unicode UCS-2 с променлива дължина, <=2GB | ТЕКСТ |
ТЕКСТ | Данни за знаци с променлива дължина, <=2GB | ТЕКСТ |
NTEXT | Данни Unicode UCS-2 с променлива дължина, <=2GB | ТЕКСТ |
ДВОЙНА ТОЧНОСТ | Число с двойна точност с плаваща запетая | ДВОЙНА ТОЧНОСТ |
FLOAT(p) | Число с плаваща запетая | ДВОЙНА ТОЧНОСТ |
ЦЯЛО ЧИСЛО | 32-битово цяло число | ЦЯЛО ЧИСЛО |
NUMERIC(p,s) | Номер на фиксирана точка | NUMERIC(p,s) |
ДАТА | Дата включва година, месец и ден | ДАТА |
DATETIME | Дата и час с дроб | TIMESTAMP(3) |
DATETIME2(p) | Дата и час с дроб | TIMESTAMP(n) |
DATETIMEOFFSET(p) | Дата и час с фракция и часова зона | TIMESTAMP(p) С ЧАСОВА ЗОНА |
SMALLDATETIME | Дата и час | TIMESTAMP(0) |
TINYINT | 8-битово цяло число без знак, от 0 до 255 | SMALLINT |
УНИКАЛЕН ИДЕНТИФИКАТОР | 16 байтови GUID(UUID) данни | CHAR(16) |
ROWVERSION | Автоматично актуализирани двоични данни | BYTEA |
МАЛКИ ПАРИ | 32-битова валута | ПАРИ |
ИЗОБРАЖЕНИЕ | Двоични данни с променлива дължина, <=2GB | BYTEA |
Несъвместимости в MS SQL Server и PostgreSQL
Има много несъвместимости в MS SQL Server и PostgreSQL, можете да видите някои от тях тук. Можете да ги автоматизирате, като създадете разширения, така че да можете да използвате функцията на MS SQL Server, както е в PostgreSQL, и да спестите времето си.
ДАТАЧАСТ
DATEPART трябва да бъде заменен с DATE_PART в PostgreSQL.
Пример
MS SQL:
DATEPART( datepart , date )
PostgreSQL:
date_part( text , timestamp )
date_part( text , interval )
ISNULL
Функцията ISNULL трябва да бъде заменена с функция COALESCE в PostgreSQL.
Пример
MS SQL Server:
ISNULL(exp, replacement)
PostgreSQL:
COALESCE(exp, replacement)
ПРАБЕЛ
Функцията SPACE в MS SQL Server трябва да бъде заменена с функция REPEAT в PostgreSQL.
Пример
MS SQL Server:
SPACE($n)
Където $n е броят на интервалите, които трябва да бъдат върнати.
PostgreSQL:
REPEAT(‘ ’, $n)
DATEADD
PostgreSQL не предоставя функция DATEADD, подобна на MS SQL Server, можете да използвате аритметика за дата и час с интервални литерали, за да получите същите резултати.
Пример
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’;
Конкатенация на низове
MS SQL Server използва „+“ за конкатенация на низове, докато PostgreSQL използва „||“ за същото.
Пример
MS SQL Server:
SELECT FirstName + LastName FROM employee;
PostgreSQL:
SELECT FirstName || LastName FROM employee;
CHARINDEX
Има функция CHARINDEX в PostgreSQL. Можете да замените тази функция с еквивалентна на PostgreSQL функция POSITION.
Пример
MS SQL Server:
SELECT CHARINDEX('our', 'resource');
PostgreSQL:
SELECT POSITION('our' in 'resource');
GETDATE
Функцията GETDATE връща текущата дата и час. В PostgreSQL няма функция GETDATE, но има функция NOW() за същата цел. Ако има множество поява на функцията GETDATE, тогава можете да ги автоматизирате с помощта на разширение. Моля, проверете как да създавате модули с помощта на разширение.
Пример
MS SQL Server:
SELECT GETDATE();
PostgreSQL:
SELECT NOW();
Инструменти
Можете да използвате някои инструменти за мигриране на база данни на MS SQL Server към PostgreSQL. Моля, тествайте инструмента, преди да го използвате.
-
Ploader
Можете да използвате инструмента pgloader, за да мигрирате MS SQL база данни към PostgreSQL. Командите в ploader зареждат данните от базата данни MS SQL. Pgloader поддържа автоматично откриване на схемата, включително изграждане на индекси, първичен ключ и ограничения за външни ключове.
Pgloader предоставя различни правила за прехвърляне, които могат да конвертират типа данни на MS SQL в тип данни PostgreSQL.
-
Sqlserver2pgsql
Това е друг инструмент за миграция с отворен код за конвертиране на база данни на Microsoft SQL Server в PostgreSQL база данни, възможно най-автоматично. Sqlserver2pgsql е написан на Perl.
Инструментът Sqlserver2pgsql прави две неща:
- Преобразува схема на SQL Server в PostgreSQL схема
- Може да създаде стрела Pentaho Data Integrator (Kettle) за мигриране на всички данни от SQL Server към PostgreSQL. Това е незадължителна част.
Тестване
Тестването на приложението и мигрираната база данни е много важно, тъй като някои от функциите са еднакви и в двете бази данни, но поведението е различно.
Някои често срещани сценарии трябва да бъдат проверени:
- Проверете дали всички обекти на базата данни са преобразувани правилно или не.
- Проверете дали поведението на всички функции в DML работи правилно или не.
- Заредете примерни данни в двете бази данни и проверете резултата от всички DML заявки в двете бази данни. Резултатът от всички SQL трябва да е един и същ.
- Проверете производителността на DML и я подобрете, ако е необходимо.