Như bạn có thể biết, Microsoft SQL Server là RDBMS rất phổ biến với cấp phép hạn chế cao và chi phí sở hữu cao nếu cơ sở dữ liệu có kích thước đáng kể hoặc được sử dụng bởi một số lượng lớn khách hàng. Nó cung cấp một giao diện rất thân thiện và dễ học. Điều này đã dẫn đến một cơ sở người dùng được cài đặt lớn.
PostgreSQL là cơ sở dữ liệu mã nguồn mở tiên tiến nhất thế giới. Cộng đồng PostgreSQL rất mạnh và liên tục cải tiến các tính năng hiện có cũng như triển khai các tính năng mới. Theo xếp hạng phổ biến của db-engine, PostgreSQL là DBMS của năm 2017.
Tại sao phải chuyển từ MS SQL Server sang PostgreSQL?
- MS SQL Server là cơ sở dữ liệu độc quyền của Microsoft, trong khi PostgreSQL được phát triển và duy trì bởi cộng đồng các nhà phát triển mã nguồn mở toàn cầu. Nếu chi phí là một vấn đề, thì chắc chắn bạn nên sử dụng PostgreSQL. Bạn có thể kiểm tra giá tại đây.
- PostgreSQL là một công cụ cơ sở dữ liệu đa nền tảng và nó có sẵn cho Windows, Mac, Solaris, FreeBSD và Linux trong khi SQL Server chỉ chạy trên hệ điều hành Windows. Như bạn có thể biết, PostgreSQL là mã nguồn mở và hoàn toàn miễn phí trong khi chi phí Máy chủ MSSQL phụ thuộc vào số lượng người dùng và kích thước cơ sở dữ liệu.
- 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, v.v.
- Hưởng lợi từ các tiện ích bổ sung nguồn mở để cải thiện hiệu suất.
Những điều bạn nên biết
Mặc dù cả cơ sở dữ liệu Microsoft SQL Server và cơ sở dữ liệu PostgreSQL đều tuân thủ ANSI-SQL nhưng vẫn có sự khác biệt giữa cú pháp SQL, kiểu dữ liệu, độ phân biệt chữ hoa chữ thường và điều đó làm cho việc truyền dữ liệu không quá đơn giản.
Trước khi di chuyển, hãy hiểu sự khác biệt giữa MSSQL và PostgreSQL. Có rất nhiều tính năng trong cả hai cơ sở dữ liệu, vì vậy bạn nên biết hoạt động của các tính năng / chức năng đó trong MSSQL và PostgreSQL. Vui lòng kiểm tra một số khác biệt quan trọng mà bạn nên biết trước khi di chuyển.
Ánh xạ kiểu dữ liệu
Một số kiểu dữ liệu của MSSQL 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.
Microsoft SQL Server | PostgreSQL | |
---|---|---|
BIGINT | số nguyên 64 bit | BIGINT |
BINARY (n) | Chuỗi byte có độ dài cố định | BYTEA |
BIT | 1, 0 hoặc NULL | BOOLEAN |
CHAR (n) | Chuỗi ký tự có độ dài cố định, 1 <=n <=8000 | CHAR (n) |
VARCHAR (n) | Chuỗi ký tự có độ dài thay đổi, 1 <=n <=8000 | VARCHAR (n) |
VARCHAR (tối đa) | Chuỗi ký tự có độ dài thay đổi, <=2GB | VĂN BẢN |
VARBINARY (n) | Chuỗi byte có độ dài thay đổi, 1 <=n <=8000 | BYTEA |
VARBINARY (tối đa) | Chuỗi byte có độ dài thay đổi, <=2GB | BYTEA |
NVARCHAR (n) | Chuỗi Unicode UCS-2 có độ dài thay đổi | VARCHAR (n) |
NVARCHAR (tối đa) | Dữ liệu Unicode UCS-2 có độ dài thay đổi, <=2GB | VĂN BẢN |
VĂN BẢN | Dữ liệu ký tự có độ dài thay đổi, <=2GB | VĂN BẢN |
NTEXT | Dữ liệu Unicode UCS-2 có độ dài thay đổi, <=2GB | VĂN BẢN |
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 ĐÔI |
INTEGER | số nguyên 32 bit | INTEGER |
SỐ (p, s) | Số điểm cố định | SỐ (p, s) |
NGÀY | Ngày bao gồm năm, tháng và ngày | NGÀY |
DATETIME | Ngày và Giờ với phân số | TIMESTAMP (3) |
DATETIME2 (p) | Ngày và Giờ với phân số | TIMESTAMP (n) |
DATETIMEOFFSET (p) | Ngày và giờ với phân số và múi giờ | TIMESTAMP (p) VỚI KHU VỰC THỜI GIAN |
SMALLDATETIME | Ngày và giờ | TIMESTAMP (0) |
TINYINT | số nguyên không dấu 8 bit, 0 đến 255 | SMALLINT |
UNIQUEIDENTIFIER | Dữ liệu GUID (UUID) 16 byte | CHAR (16) |
ROWVERSION | Dữ liệu nhị phân được cập nhật tự động | BYTEA |
TIỀN NHỎ | Số tiền 32 bit | TIỀN |
HÌNH ẢNH | Dữ liệu nhị phân có độ dài thay đổi, <=2GB | BYTEA |
Sự không tương thích trong MS SQL Server và PostgreSQL
Có rất nhiều điểm không tương thích hiện diện trong MS SQL Server 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 tiện ích mở rộng để có thể sử dụng chức năng MS SQL Server như trong PostgreSQL và bạn có thể tiết kiệm thời gian của mình.
DATEPART
DATEPART phải được thay thế bằng DATE_PART trong PostgreSQL.
Ví dụ
MS SQL:
DATEPART( datepart , date )
PostgreSQL:
date_part( text , timestamp )
date_part( text , interval )
ISNULL
Hàm ISNULL phải được thay thế bằng hàm COALESCE trong PostgreSQL.
Ví dụ
MS SQL Server:
ISNULL(exp, replacement)
PostgreSQL:
COALESCE(exp, replacement)
KHÔNG GIAN
Hàm SPACE trong MS SQL Server phải được thay thế bằng hàm REPEAT trong PostgreSQL.
Ví dụ
MS SQL Server:
SPACE($n)
Trong đó $ n là số khoảng trắng được trả về.
PostgreSQL:
REPEAT(‘ ’, $n)
DATEADD
PostgreSQL không cung cấp hàm DATEADD tương tự như MS SQL Server, bạn có thể sử dụng số học datetime với các ký tự khoảng thời gian để nhận được kết quả tương tự.
Ví dụ
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’;
Nối chuỗi
MS SQL Server sử dụng ‘+’ cho Kết nối chuỗi trong khi PostgreSQL sử dụng ‘||’ cho tương tự.
Ví dụ
MS SQL Server:
SELECT FirstName + LastName FROM employee;
PostgreSQL:
SELECT FirstName || LastName FROM employee;
CHARINDEX
Có chức năng CHARINDEX trong PostgreSQL. Bạn có thể thay thế hàm này bằng hàm POSITION tương đương của PostgreSQL.
Ví dụ
MS SQL Server:
SELECT CHARINDEX('our', 'resource');
PostgreSQL:
SELECT POSITION('our' in 'resource');
NHẬN
Hàm GETDATE trả về ngày và giờ hiện tại. Không có hàm GETDATE trong PostgreSQL, nhưng có hàm NOW () cho cùng mục đích. Nếu có nhiều lần xuất hiện của hàm GETDATE thì bạn có thể tự động hóa chúng bằng cách sử dụng tiện ích mở rộng. Vui lòng kiểm tra cách tạo mô-đun bằng tiện ích mở rộng.
Ví dụ
MS SQL Server:
SELECT GETDATE();
PostgreSQL:
SELECT NOW();
Công cụ
Bạn có thể sử dụng một số công cụ để di chuyển cơ sở dữ liệu MS SQL Server sang PostgreSQL. Vui lòng kiểm tra công cụ trước khi sử dụng.
-
Pgloader
Bạn có thể sử dụng công cụ pgloader để di chuyển cơ sở dữ liệu MS SQL sang PostgreSQL. Các lệnh trong pgloader tải dữ liệu từ cơ sở dữ liệu MS SQL. Pgloader hỗ trợ tự động khám phá lược đồ, bao gồm xây dựng các chỉ mục, các ràng buộc về khóa chính và khóa ngoại.
Pgloader cung cấp các quy tắc truyền khác nhau có thể chuyển đổi kiểu dữ liệu MS SQL thành kiểu dữ liệu PostgreSQL.
-
Sqlserver2pgsql
Đây là một công cụ di chuyển mã nguồn mở khác để chuyển đổi cơ sở dữ liệu Microsoft SQL Server thành cơ sở dữ liệu PostgreSQL, một cách tự động nhất có thể. Sqlserver2pgsql được viết bằng Perl.
Công cụ Sqlserver2pgsql thực hiện hai việc:
- Nó chuyển đổi một lược đồ SQL Server thành một lược đồ PostgreSQL
- Nó có thể tạo ra một bộ tích hợp dữ liệu Pentaho (Ấm đun nước) để di chuyển tất cả dữ liệu từ SQL Server sang PostgreSQL. Đây là một phần không bắt buộc.
Thử nghiệm
Việc kiểm tra ứng dụng và cơ sở dữ liệu đã di chuyển là rất quan trọng vì một số chức năng giống nhau trong cả hai cơ sở dữ liệu, tuy nhiên, hoạt động là khác nhau.
Một số tình huống phổ biến cần được kiểm tra:
- Kiểm tra xem tất cả các đối tượng cơ sở dữ liệu có được chuyển đổi chính xác hay không.
- Kiểm tra hoạt động của tất cả các chức năng trong DML có hoạt động chính xác hay không.
- Tải dữ liệu mẫu vào cả hai cơ sở dữ liệu và kiểm tra kết quả của tất cả các truy vấn DML trong cả hai cơ sở dữ liệu. Kết quả của tất cả SQL phải giống nhau.
- Kiểm tra hiệu suất của DML và cải thiện nó nếu cần.