Cho dù việc di chuyển một cơ sở dữ liệu hoặc một ứng dụng từ DB2 sang PostgreSQL chỉ với một loại kiến thức cơ sở dữ liệu thì vẫn chưa đủ, có một số điều cần biết về sự khác biệt giữa hai hệ thống cơ sở dữ liệu.
PostgreSQL là cơ sở dữ liệu mã nguồn mở tiên tiến được sử dụng rộng rãi nhất trên thế giới. Cơ sở dữ liệu PostgreSQL có bộ tính năng phong phú và cộng đồng PostgreSQL rất mạnh và họ liên tục cải tiến các tính năng hiện có và thêm các tính năng mới. Theo db-engine.com, PostgreSQL là DBMS của năm 2017 và 2018.
Như bạn đã biết DB2 và PostgreSQL là RDBMS nhưng có một số điểm không tương thích. Trong blog này, chúng tôi có thể thấy một số điểm không tương thích này.
Tại sao nên chuyển từ DB2 sang PostgreSQL
- Cấp phép nguồn mở linh hoạt và tính khả dụng dễ dàng từ các nhà cung cấp đám mây công cộng như AWS, Google cloud, Microsoft Azure.
- Hưởng lợi từ các tiện ích bổ sung nguồn mở để cải thiện hiệu suất cơ sở dữ liệu.
Bạn có thể thấy trong hình ảnh dưới đây rằng mức độ phổ biến của PostgreSQL đang tăng lên theo thời gian so với DB2.
Lãi suất theo thời gian
Đánh giá di cư
Bước đầu tiên của quá trình di chuyển là phân tích ứng dụng và đối tượng cơ sở dữ liệu, tìm ra điểm không tương thích giữa cả hai cơ sở dữ liệu và ước tính thời gian và chi phí cần thiết cho việc di chuyển.
Ánh xạ kiểu dữ liệu
Một số kiểu dữ liệu của IBM DB2 không khớp trực tiếp với kiểu dữ liệu PostgreSQL, vì vậy bạn cần thay đổi nó thành kiểu dữ liệu PostgreSQL tương ứng.
Vui lòng kiểm tra bảng dưới đây.
IBM DB2 | PostgreSQL | |
BIGINT | số nguyên 64 bit | BIGINT |
BLOB (n) | Đối tượng lớn nhị phân | BYTEA |
CLOB (n) | Đối tượng lớn ký tự | VĂN BẢN |
DBCLOB (n) | Đối tượng lớn UTF-16 ký tự | VĂN BẢN |
NCLOB (n) | Đối tượng lớn UTF-16 ký tự | VĂN BẢN |
CHAR (n), CHARACTER (n) | Chuỗi có độ dài cố định | CHAR (n) |
CHARACTER VARYING (n) | Chuỗi có độ dài thay đổi | VARCHAR (n) |
NCHAR (n) | Chuỗi UTF-16 có độ dài cố định | CHAR (n) |
NCHAR VARYING (n) | Chuỗi UTF-16 có độ dài thay đổi | VARCHAR (n) |
VARCHAR (n) | Chuỗi có độ dài thay đổi | VARCHAR (n) |
VARGRAPHIC (n) | Chuỗi UTF-16 có độ dài thay đổi | VARCHAR (n) |
VARCHAR (n) CHO DỮ LIỆU BIT | Chuỗi byte có độ dài thay đổi | BYTEA |
NVARCHAR (n) | Chuỗi UTF-16 có độ dài thay đổi | VARCHAR (n) |
GRAPHIC (n) | Chuỗi UTF-16 có độ dài cố định | CHAR (n) |
INTEGER | số nguyên 32 bit | INTEGER |
SỐ (p, s) | Số điểm cố định | SỐ (p, s) |
DECIMAL (p, s) | Số điểm cố định | DECIMAL (p, s) |
CHÍNH XÁC ĐÔI | Số dấu phẩy động chính xác kép | CHÍNH XÁC ĐÔI |
FLOAT (p) | Số dấu phẩy động chính xác kép | CHÍNH XÁC ĐÔI |
THỰC | Số dấu phẩy động chính xác đơn | THỰC |
SMALLINT | số nguyên 16 bit | SMALLINT |
NGÀY | Ngày (năm, tháng và ngày) | NGÀY |
THỜI GIAN | TIME (giờ, phút và giây) | TIME (0) |
TIMESTAMP (p) | Ngày và giờ với phân số | TIMESTAMP (p) |
DECFLOAT (16 | 34) | IEEE Số dấu phẩy động | NỔI |
Sự không tương thích trong DB2 và PostgreSQL
Có rất nhiều điểm không tương thích hiện diện trong DB2 và PostgreSQL, bạn có thể xem một số điểm không tương thích tại đây. Bạn có thể tự động hóa chúng bằng cách tạo các phần mở rộng để bạn có thể sử dụng hàm DB2 như trong PostgreSQL và bạn có thể tiết kiệm thời gian của mình. Vui lòng kiểm tra hoạt động của hàm DB2 trong PostgreSQL
TABLESPACE
Mệnh đề TABLESPACE xác định tên của vùng bảng chứa bảng mới tạo.
DB2 sử dụng mệnh đề IN cho TABLESPACE, vì vậy nó nên được thay thế bằng mệnh đề TABLESPACE trong PostgreSQL.
Ví dụ:
DB2:
IN <tablespace_name>
PostgreSQL:
TABLESPACE <tablespace_name>
CHỈ TÌM HIỂU ĐẦU TIÊN
Trong DB2, bạn có thể sử dụng mệnh đề CHỈ FETCH FIRST n ROWS ONLY để truy xuất không quá n hàng. Trong PostgreSQL, bạn có thể sử dụng LIMIT n tương đương với CHỈ TÌM HIỂU N ROWS ĐẦU TIÊN.
Ví dụ:
DB2:
SELECT * FROM EMP
ORDER BY EMPID
FETCH FIRST 10 ROWS ONLY;
PostgreSQL:
SELECT * FROM EMP
ORDER BY EMPID
LIMIT 10;
ĐƯỢC TẠO BỞI DEFAULT AS IDENTITY
Cột IDENTITY trong DB2 có thể được thay thế bằng cột Serial trong 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
);
Chọn từ SYSIBM.SYSDUMMY1
Không có bảng “SYSIBM.SYSDUMMY1” trong PostgreSQL. PostgreSQL cho phép mệnh đề “CHỌN” mà không có “TỪ”. Bạn có thể loại bỏ điều này bằng cách sử dụng tập lệnh.
Chức năng vô hướng:DB2 so với PostgreSQL
TRẦN / TRẦN
CEIL hoặc CEILING trả về giá trị số nguyên nhỏ nhất tiếp theo lớn hơn hoặc bằng giá trị đầu vào (ví dụ:CEIL (122,89) trả về 123, còn CEIL (122,19) trả về 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) ;
NGÀY
Nó chuyển đổi đầu vào thành giá trị ngày tháng. Bạn có thể chuyển đổi hàm DATE thành hàm TO_DATE trong PostgreSQL.
DB2:
SELECT DATE ('2018-09-21') FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT TO_DATE ('21-09-2018',’DD-MM-YYYY’) ;
NGÀY
Nó trả về phần ngày (ngày trong tháng) của ngày hoặc giá trị tương đương. Định dạng đầu ra là số nguyên.
DB2:
SELECT DAY (DATE('2016-09-21')) FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT DATE_PART('day', '2016- 09-21'::date);
THÁNG
Nó trả về phần tháng của giá trị ngày. Định dạng đầu ra là số nguyên.
DB2:
SELECT MONTH (DATE('2016-09-21')) FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT DATE_PART ('month', '2016-09- 21'::date);
POSSTR
Trả về vị trí của chuỗi. Hàm POSSTR được thay thế bằng hàm POSITION trong 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
Nó trả về một giá trị dấu phẩy động giả ngẫu nhiên trong phạm vi từ 0 đến một. Bạn có thể thay thế hàm RAND thành RANDOM trong PostgreSQL.
DB2:
SELECT RAND() FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT RANDOM();
Tải xuống Báo cáo chính thức hôm nay Quản lý &Tự động hóa PostgreSQL với ClusterControlTìm hiểu về những điều bạn cần biết để triển khai, giám sát, quản lý và mở rộng PostgreSQLTải xuống Báo cáo chính thức Công cụ
Bạn có thể sử dụng một số công cụ để di chuyển cơ sở dữ liệu DB2 sang PostgreSQL. Vui lòng kiểm tra công cụ trước khi sử dụng.
-
Db2topg
Nó là một công cụ tự động để di chuyển DB2 sang PostgreSQL giống như ora2pg. Các tập lệnh trong công cụ db2pg chuyển đổi càng nhiều càng tốt cơ sở dữ liệu DB2 UDB. Công cụ này không hoạt động với DB2 zOS. Nó rất đơn giản để sử dụng, bạn cần một kết xuất SQL của lược đồ của bạn và sau đó sử dụng tập lệnh db2pg để chuyển đổi nó thành một lược đồ PostgreSQL.
-
Chuyển đổi hoàn toàn
Công cụ doanh nghiệp nhanh chóng sao chép cơ sở dữ liệu DB2 sang PostgreSQL. Việc chuyển đổi cơ sở dữ liệu DB2 sang PostgreSQL bằng công cụ Full Convert rất đơn giản.
Các bước thực hiện:- Kết nối với cơ sở dữ liệu nguồn, tức là DB2
- Tùy chọn:Chọn các bảng bạn muốn chuyển đổi (theo mặc định, tất cả các bảng đã được chọn)
- Bắt đầu chuyển đổi.
Kết luận
Như chúng ta có thể thấy, việc chuyển từ DB2 sang PostgreSQL không phải là khoa học tên lửa, nhưng chúng ta cần ghi nhớ điều mà chúng ta đã thấy trước đó để tránh các vấn đề lớn trong hệ thống của chúng ta. Vì vậy, chúng tôi chỉ cần cẩn thận trong nhiệm vụ và tiếp tục, bạn có thể chuyển sang cơ sở dữ liệu mã nguồn mở tiên tiến nhất và tận dụng những lợi ích của nó.