Независимо дали мигрирането на база данни или приложение от DB2 към PostgreSQL само с един тип познания за база данни не е достатъчно, има няколко неща, които трябва да знаете за разликите между двете системи за бази данни.
PostgreSQL е най-широко използваната усъвършенствана база данни с отворен код. PostgreSQL базата данни има богат набор от функции и PostgreSQL общността е много силна и те непрекъснато подобряват съществуващите функции и добавят нови функции. Според db-engine.com, PostgreSQL е СУБД на годината 2017 и 2018.
Както знаете, DB2 и PostgreSQL са RDBMS, но има някои несъвместимости. В този блог можем да видим някои от тези несъвместимости.
Защо да мигрирате от DB2 към PostgreSQL
- Гъвкаво лицензиране с отворен код и лесна наличност от публични доставчици на облак като AWS, Google cloud, Microsoft Azure.
- Възползвайте се от добавки с отворен код, за да подобрите производителността на базата данни.
Можете да видите на изображението по-долу, че популярността на PostgreSQL нараства с времето в сравнение с DB2.
Лихва с течение на времето
Оценка на миграцията
Първата стъпка от миграцията е да анализирате приложението и обекта на базата данни, да откриете несъвместимостта между двете бази данни и да оцените времето и разходите, необходими за миграцията.
Съпоставяне на типове данни
Някои от типовете данни на IBM DB2 не съвпадат директно с PostgreSQL типове данни, така че трябва да ги промените на съответния PostgreSQL тип данни.
Моля, проверете таблицата по-долу.
IBM DB2 | PostgreSQL | |
ГОЛЯМ | 64-битово цяло число | BIGINT |
BLOB(n) | Бинарен голям обект | BYTEA |
CLOB(n) | Символен голям обект | ТЕКСТ |
DBCLOB(n) | UTF-16 знаков голям обект | ТЕКСТ |
NCLOB(n) | UTF-16 знаков голям обект | ТЕКСТ |
CHAR(n), CHARACTER(n) | Низ с фиксирана дължина | CHAR(n) |
ПРОМЕНЯЩ СИМВОЛ(n) | Низ с променлива дължина | VARCHAR(n) |
NCHAR(n) | UTF-16 низ с фиксирана дължина | CHAR(n) |
NCHAR VARYING(n) | UTF-16 низ с променлива дължина | VARCHAR(n) |
VARCHAR(n) | Низ с променлива дължина | VARCHAR(n) |
VARGRAPHIC(n) | UTF-16 низ с променлива дължина | VARCHAR(n) |
VARCHAR(n) ЗА БИТ ДАННИ | Байтов низ с променлива дължина | BYTEA |
NVARCHAR(n) | Утф-16 низ с различна дължина | VARCHAR(n) |
ГРАФИЧЕН(n) | Утф-16 низ с фиксирана дължина | CHAR(n) |
ЦЯЛО ЧИСЛО | 32-битово цяло число | ЦЯЛО ЧИСЛО |
NUMERIC(p,s) | Номер с фиксирана точка | NUMERIC(p,s) |
DECIMAL(p,s) | Номер с фиксирана точка | DECIMAL(p,s) |
ДВОЙНА ТОЧНОСТ | Число с двойна точност с плаваща запетая | ДВОЙНА ТОЧНОСТ |
FLOAT(p) | Число с двойна точност с плаваща запетая | ДВОЙНА ТОЧНОСТ |
ИСТИНСКИ | Число с плаваща запетая с единична точност | ИСТИНСКИ |
SMALLINT | 16-битово цяло число | SMALLINT |
ДАТА | Дата (година, месец и ден) | ДАТА |
ВРЕМЕ | ВРЕМЕ (час, минута и секунда) | ВРЕМЕ(0) |
TIMESTAMP(p) | Дата и час с дроб | TIMESTAMP(p) |
DECFLOAT(16 | 34) | IEEE номер с плаваща запетая | ПЛАВАНЕ |
Несъвместимости в DB2 и PostgreSQL
Има много несъвместимости в DB2 и PostgreSQL, можете да видите някои от тях тук. Можете да ги автоматизирате, като създадете разширения, така че да можете да използвате DB2 функцията, както е в PostgreSQL, и да спестите времето си. Моля, проверете поведението на DB2 функцията в PostgreSQL
ПРЯСТО ЗА МАССА
Клаузата TABLESPACE дефинира името на пространството за таблици, в което се намира новосъздадената таблица.
DB2 използва клауза IN за TABLESPACE, така че трябва да бъде заменена с клауза TABLESPACE в PostgreSQL.
Пример:
DB2:
IN <tablespace_name>
PostgreSQL:
TABLESPACE <tablespace_name>
ПЪРВО ИЗВЛЕЧВАНЕ САМО n РЕДОВЕ
В DB2 можете да използвате клауза FETCH FIRST n ROWS ONLY, за да извлечете не повече от n реда. В PostgreSQL можете да използвате LIMIT n, което е еквивалентно на FETCH FIRST n РЕДОВЕ САМО.
Пример:
DB2:
SELECT * FROM EMP
ORDER BY EMPID
FETCH FIRST 10 ROWS ONLY;
PostgreSQL:
SELECT * FROM EMP
ORDER BY EMPID
LIMIT 10;
ГЕНЕРИРАНО ПО ПОДРАЗБИРАНЕ КАТО ИДЕНТИФИКАЦИЯ
Колоната IDENTITY в DB2 може да бъде заменена от колона Serial в PostgreSQL.
DB2:
CREATE TABLE <table_name> (
<column_name> INTEGER NOT NULL
GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1, CACHE 20)
);
PostgreSQL:
CREATE TABLE <table_name> (
<column_name> SERIAL NOT NULL
);
Изберете от SYSIBM.SYSDUMMY1
В PostgreSQL няма таблица „SYSIBM.SYSDUMMY1“. PostgreSQL позволява „SELECT“ без клауза „FROM“. Можете да премахнете това, като използвате скрипт.
Скаларни функции:DB2 срещу PostgreSQL
ТАВАН/ТАВАН
CEIL или CEILING връща следващата най-малка стойност на цяло число, която е по-голяма или равна на входа (напр. CEIL(122.89) връща 123, също CEIL(122.19) връща 123).
DB2:
SELECT CEIL(123.89) FROM SYSIBM.SYSDUMMY1;
SELECT CEILING(123.89) FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT CEIL(123.89) ;
SELECT CEILING(123.89) ;
ДАТА
Той преобразува въведените стойности за дата. Можете да конвертирате функция DATE във функция TO_DATE в PostgreSQL.
DB2:
SELECT DATE ('2018-09-21') FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT TO_DATE ('21-09-2018',’DD-MM-YYYY’) ;
ДЕН
Връща ден (ден от месеца) част от дата или еквивалентна стойност. Изходният формат е цяло число.
DB2:
SELECT DAY (DATE('2016-09-21')) FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT DATE_PART('day', '2016- 09-21'::date);
МЕСЕЦ
Връща месечната част от стойността на датата. Изходният формат е цяло число.
DB2:
SELECT MONTH (DATE('2016-09-21')) FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT DATE_PART ('month', '2016-09- 21'::date);
POSSTR
Връща позицията на низа. Функцията POSSTR се заменя с функция POSITION в PostgreSQL.
DB2:
Usage : POSSTR(<Filed_1>,<Field2>)
SELECT POSSTR('PostgreSQL and DB2', 'and') FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
Usage: POSITION(<Field_1> IN<Field_2>)
SELECT POSITION('and' IN'PostgreSQL and DB2');
RAND
Той връща псевдослучайна стойност с плаваща запетая в диапазона от нула до едно включително. Можете да замените функцията RAND на RANDOM в PostgreSQL.
DB2:
SELECT RAND() FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT RANDOM();
Изтеглете Бялата книга днес Управление и автоматизация на PostgreSQL с ClusterControl Научете какво трябва да знаете, за да внедрите, наблюдавате, управлявате и мащабирате PostgreSQLD Изтеглете Бялата книга Инструменти
Можете да използвате някои инструменти за мигриране на DB2 база данни към PostgreSQL. Моля, тествайте инструмента, преди да го използвате.
-
Db2topg
Това е автоматизиран инструмент за миграция на DB2 към PostgreSQL като ora2pg. Скриптовете в инструмента db2pg конвертират колкото е възможно повече от DB2 UDB база данни. Този инструмент не работи с DB2 zOS. Много е лесна за използване, имате нужда от SQL дъмп на вашата схема и след това използвайте скрипт db2pg, за да го конвертирате в PostgreSQL схема.
-
Пълно конвертиране
Инструментът за предприятие бързо копира DB2 база данни в PostgreSQL. Преобразуването на DB2 в PostgreSQL база данни с помощта на инструмента за пълно конвертиране е много лесно.
Стъпки:- Свържете се с изходната база данни, т.е. DB2
- По избор:Изберете таблиците, които искате да конвертирате (по подразбиране всички избрани таблици)
- Започнете преобразуването.
Заключение
Както видяхме, мигрирането от DB2 към PostgreSQL не е ракетна наука, но трябва да имаме предвид нещото, което видяхме по-рано, за да избегнем големи проблеми в нашата система. Така че, трябва само да сме внимателни в задачата и да продължите, можете да мигрирате към най-модерната база данни с отворен код и да се възползвате от предимствата й.