PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Мигриране от MSSQL към PostgreSQL – какво трябва да знаете

Както може би знаете, Microsoft SQL Server е много популярна RDBMS със силно ограничително лицензиране и висока цена на собственост, ако базата данни е със значителен размер или се използва от значителен брой клиенти. Той предоставя много удобен за потребителя интерфейс и лесен за научаване. Това доведе до голяма инсталирана потребителска база.

PostgreSQL е най-модерната база данни с отворен код в света. PostgreSQL общността е много силна и непрекъснато подобрява съществуващите функции и внедрява нови функции. Според класацията на популярност на db-engine PostgreSQL беше СУБД на 2017 г.

Защо да мигрирате от MS SQL Server към PostgreSQL?

  1. MS SQL Server е собствена база данни от Microsoft, докато PostgreSQL се разработва и поддържа от глобална общност от разработчици с отворен код. Ако цената е проблем, тогава определено трябва да използвате PostgreSQL. Можете да проверите цените тук.
  2. PostgreSQL е система за база данни за различни платформи и е достъпна за Windows, Mac, Solaris, FreeBSD и Linux, докато SQL Server работи само на операционна система Windows. Както може би знаете, PostgreSQL е с отворен код и напълно безплатен, докато цената на MSSQL Server зависи от броя на потребителите и размера на базата данни.
  3. Гъвкаво лицензиране с отворен код и лесна наличност от публични доставчици на облак като AWS, облак на Google и др.
  4. Възползвайте се от добавки с отворен код, за да подобрите производителността.

Какво трябва да знаете

Въпреки че както базата данни на 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
Изтеглете Бялата книга днес Управление и автоматизация на PostgreSQL с ClusterControl Научете какво трябва да знаете, за да внедрите, наблюдавате, управлявате и мащабирате PostgreSQLD Изтеглете Бялата книга

Несъвместимости в 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. Моля, тествайте инструмента, преди да го използвате.

  1. Ploader

    Можете да използвате инструмента pgloader, за да мигрирате MS SQL база данни към PostgreSQL. Командите в ploader зареждат данните от базата данни MS SQL. Pgloader поддържа автоматично откриване на схемата, включително изграждане на индекси, първичен ключ и ограничения за външни ключове.

    Pgloader предоставя различни правила за прехвърляне, които могат да конвертират типа данни на MS SQL в тип данни PostgreSQL.

  2. Sqlserver2pgsql

    Това е друг инструмент за миграция с отворен код за конвертиране на база данни на Microsoft SQL Server в PostgreSQL база данни, възможно най-автоматично. Sqlserver2pgsql е написан на Perl.

    Инструментът Sqlserver2pgsql прави две неща:

    1. Преобразува схема на SQL Server в PostgreSQL схема
    2. Може да създаде стрела Pentaho Data Integrator (Kettle) за мигриране на всички данни от SQL Server към PostgreSQL. Това е незадължителна част.

Тестване

Тестването на приложението и мигрираната база данни е много важно, тъй като някои от функциите са еднакви и в двете бази данни, но поведението е различно.

Някои често срещани сценарии трябва да бъдат проверени:

  • Проверете дали всички обекти на базата данни са преобразувани правилно или не.
  • Проверете дали поведението на всички функции в DML работи правилно или не.
  • Заредете примерни данни в двете бази данни и проверете резултата от всички DML заявки в двете бази данни. Резултатът от всички SQL трябва да е един и същ.
  • Проверете производителността на DML и я подобрете, ако е необходимо.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Автоматизирани надстройки на PostgreSQL клъстери в облак с почти нулев престой (част I)

  2. Изберете тип данни на полето в postgres

  3. Обявяване на repmgr 2.0RC2

  4. Използване на курсори за страници в PostgreSQL

  5. Големи данни с PostgreSQL и Apache Spark