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

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

Независимо дали мигрирането на база данни или приложение от DB2 към PostgreSQL само с един тип познания за база данни не е достатъчно, има няколко неща, които трябва да знаете за разликите между двете системи за бази данни.

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

Както знаете, DB2 и PostgreSQL са RDBMS, но има някои несъвместимости. В този блог можем да видим някои от тези несъвместимости.

Защо да мигрирате от DB2 към PostgreSQL

  1. Гъвкаво лицензиране с отворен код и лесна наличност от публични доставчици на облак като AWS, Google cloud, Microsoft Azure.
  2. Възползвайте се от добавки с отворен код, за да подобрите производителността на базата данни.

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

  1. Db2topg

    Това е автоматизиран инструмент за миграция на DB2 към PostgreSQL като ora2pg. Скриптовете в инструмента db2pg конвертират колкото е възможно повече от DB2 UDB база данни. Този инструмент не работи с DB2 zOS. Много е лесна за използване, имате нужда от SQL дъмп на вашата схема и след това използвайте скрипт db2pg, за да го конвертирате в PostgreSQL схема.

  2. Пълно конвертиране

    Инструментът за предприятие бързо копира DB2 база данни в PostgreSQL. Преобразуването на DB2 в PostgreSQL база данни с помощта на инструмента за пълно конвертиране е много лесно.
    Стъпки:

    • Свържете се с изходната база данни, т.е. DB2
    • По избор:Изберете таблиците, които искате да конвертирате (по подразбиране всички избрани таблици)
    • Започнете преобразуването.

Заключение

Както видяхме, мигрирането от DB2 към PostgreSQL не е ракетна наука, но трябва да имаме предвид нещото, което видяхме по-рано, за да избегнем големи проблеми в нашата система. Така че, трябва само да сме внимателни в задачата и да продължите, можете да мигрирате към най-модерната база данни с отворен код и да се възползвате от предимствата й.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PGError:ГРЕШКА:разрешение е отказано за връзка (при използване на Heroku)

  2. Как да свързвам SQL променливи в PHP?

  3. Как да разбера дали резервното ми копие на PostgreSQL е добро?

  4. Трябва ли да посоча както INDEX, така и UNIQUE INDEX?

  5. Мога ли да върна обратно транзакция, която вече съм ангажирал? (загуба на данни)