Vào ngày 3 tháng 10 năm 2019, phiên bản mới của cơ sở dữ liệu mã nguồn mở tiên tiến nhất thế giới đã được phát hành. PostgreSQL 12 hiện đã có sẵn với những cải tiến đáng chú ý đối với hiệu suất truy vấn (đặc biệt là trên các tập dữ liệu lớn hơn và sử dụng không gian tổng thể) trong số các tính năng quan trọng khác.
Trong blog này, chúng tôi sẽ xem xét các tính năng mới này và hướng dẫn bạn cách tải và cài đặt phiên bản PostgreSQL 12 mới này. Chúng tôi cũng sẽ khám phá một số cân nhắc cần tính đến khi nâng cấp.
Các tính năng và cải tiến của PostgreSQL 12
Hãy bắt đầu đề cập đến một số tính năng và cải tiến quan trọng nhất của phiên bản PostgreSQL mới này.
Lập chỉ mục
- Có một sự tối ưu hóa để sử dụng không gian và hiệu suất đọc / ghi cho các chỉ mục B-Tree.
- Giảm chi phí WAL để tạo chỉ mục GiST, GIN và SP-GiST.
- Bạn có thể thực hiện các truy vấn K-hàng xóm gần nhất với toán tử khoảng cách (<->) bằng cách sử dụng chỉ mục SP-GiST.
- Xây dựng lại các chỉ mục mà không chặn ghi vào một chỉ mục thông qua lệnh REINDEX CONCURRENTLY, cho phép người dùng tránh các trường hợp thời gian ngừng hoạt động khi xây dựng lại chỉ mục dài dòng.
Phân vùng
- Có những cải tiến so với các truy vấn trên các bảng được phân vùng, đặc biệt đối với các bảng có hàng nghìn phân vùng chỉ cần truy xuất dữ liệu từ một tập hợp con giới hạn.
- Cải thiện hiệu suất để thêm dữ liệu vào các bảng được phân vùng bằng INSERT và COPY.
- Bạn có thể đính kèm phân vùng mới vào bảng mà không cần chặn các truy vấn.
SQL
- Giờ đây, bạn có thể chạy các truy vấn trên các tài liệu JSON bằng cách sử dụng các biểu thức đường dẫn JSON được xác định trong tiêu chuẩn SQL / JSON và chúng có thể sử dụng các cơ chế lập chỉ mục hiện có cho các tài liệu được lưu trữ ở định dạng JSONB để truy xuất dữ liệu một cách hiệu quả.
- Truy vấn WITH hiện có thể được tự động nội dòng bởi PostgreSQL 12 (nếu nó không phải là đệ quy, không có bất kỳ tác dụng phụ nào và chỉ được tham chiếu một lần trong phần sau của truy vấn), do đó có thể giúp tăng hiệu suất trong số nhiều truy vấn hiện có.
- Giới thiệu "các cột đã tạo". Loại cột này tính toán giá trị của nó từ nội dung của các cột khác trong cùng một bảng. Lưu trữ giá trị tính toán này trên này cũng được hỗ trợ.
Quốc tế hóa
- PostgreSQL 12 mở rộng hỗ trợ đối chiếu ICU bằng cách cho phép người dùng xác định "đối chiếu không xác định", chẳng hạn như có thể cho phép so sánh phân biệt chữ hoa chữ thường hoặc không phân biệt trọng âm.
Xác thực
- Giới thiệu cả mã hóa phía máy khách và phía máy chủ để xác thực qua giao diện GSSAPI.
- Dịch vụ PostgreSQL có thể phát hiện ra các máy chủ LDAP nếu nó được biên dịch bằng OpenLDAP.
- Xác thực nhiều yếu tố, sử dụng tùy chọn clientcert =verify-full và một phương thức xác thực bổ sung được định cấu hình trong tệp pg_hba.conf.
Nếu bạn muốn tận dụng các tính năng và cải tiến mới này, bạn có thể truy cập trang tải xuống và tải xuống phiên bản PostgreSQL cuối cùng. Nếu bạn yêu cầu thiết lập HA, đây là blog hướng dẫn bạn cách cài đặt và định cấu hình PostgreSQL cho HA.
Cách cài đặt PostgreSQL 12
Đối với ví dụ này, chúng tôi sẽ sử dụng CentOS7 làm hệ điều hành. Vì vậy, chúng ta cần truy cập trang web tải xuống hệ điều hành dựa trên RedHat và cài đặt phiên bản tương ứng.
$ yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Nó sẽ cài đặt kho lưu trữ PostgreSQL với các gói nguồn, thử nghiệm và ổn định.
$ head /etc/yum.repos.d/pgdg-redhat-all.repo
# PGDG Red Hat Enterprise Linux / CentOS stable repositories:
[pgdg12]
name=PostgreSQL 12 for RHEL/CentOS $releasever - $basearch
baseurl=https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-$releasever-$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
...
Sau đó, cài đặt gói PostgreSQL12 của máy khách và máy chủ. Nó sẽ cài đặt một số phụ thuộc python.
$ yum install postgresql12 postgresql12-server
Bây giờ, bạn có thể khởi tạo cơ sở dữ liệu PostgreSQL 12 mới của mình.
$ /usr/pgsql-12/bin/postgresql-12-setup initdb
Initializing database ... OK
Và bật / khởi động dịch vụ PostgreSQL.
$ systemctl enable postgresql-12
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-12.service to /usr/lib/systemd/system/postgresql-12.service.
$ systemctl start postgresql-12
Và thế là xong. Bạn đã thiết lập và chạy phiên bản PostgreSQL mới.
$ psql
psql (12.0)
Type "help" for help.
postgres=# select version();
version
---------------------------------------------------------------------------------------------------------
PostgreSQL 12.0 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
(1 row)
Bây giờ bạn đã cài đặt phiên bản PostgreSQL cuối cùng, bạn có thể di chuyển dữ liệu của mình vào nút cơ sở dữ liệu mới này.
Nâng cấp lên PostgreSQL 12
Nếu bạn muốn nâng cấp phiên bản PostgreSQL hiện tại của mình lên phiên bản mới này, bạn có ba tùy chọn chính sẽ thực hiện tác vụ này.
- pg_dump :Đây là một công cụ sao lưu hợp lý cho phép bạn kết xuất dữ liệu của mình và khôi phục dữ liệu đó trong phiên bản PostgreSQL mới. Ở đây bạn sẽ có một khoảng thời gian chết thay đổi tùy theo kích thước dữ liệu của bạn .. Bạn cần dừng hệ thống hoặc tránh dữ liệu mới trong nút chính, chạy pg_dump, di chuyển kết xuất đã tạo sang nút cơ sở dữ liệu mới và khôi phục nó. Trong thời gian này, bạn không thể ghi vào cơ sở dữ liệu PostgreSQL chính của mình để tránh dữ liệu không thống nhất.
- Pg_upgrade :Đây là một công cụ PostgreSQL để nâng cấp phiên bản PostgreSQL của bạn tại chỗ. Nó có thể nguy hiểm trong môi trường sản xuất và chúng tôi không khuyến khích phương pháp này trong trường hợp đó. Sử dụng phương pháp này, bạn cũng sẽ có thời gian chết, nhưng có lẽ nó sẽ ít hơn đáng kể so với sử dụng phương pháp pg_dump trước đó.
- Sao chép lôgic :Kể từ PostgreSQL 10, bạn đã có thể sử dụng phương pháp sao chép này, cho phép bạn thực hiện các nâng cấp phiên bản lớn mà không (hoặc gần như bằng không) thời gian chết. Bằng cách này, bạn có thể thêm một nút dự phòng trong phiên bản PostgreSQL cuối cùng và khi bản sao được cập nhật, bạn có thể thực hiện quá trình chuyển đổi dự phòng để quảng bá nút PostgreSQL mới.
Cân nhắc Trước khi Nâng cấp lên PostgreSQL 12
Nói chung, đối với tất cả quá trình nâng cấp và đối với tất cả công nghệ, có một số điểm cần lưu ý. Hãy xem một số điều chính.
- Các loại dữ liệu vắng mặt, thời gian truy cập và khoảng thời gian đã bị xóa.
- Cài đặt recovery.conf nằm trong tệp postgresql.conf và nó không còn được sử dụng nữa. Nếu bạn đã tạo tệp này, máy chủ sẽ không khởi động. Các tệp recovery.signal và standby.signal hiện được sử dụng để chuyển sang chế độ không chính. Cài đặt trigger_file đã được đổi tên thành promotion_trigger_file và cài đặt chế độ chờ đã bị xóa.
- Không cho phép sử dụng nhiều thông số kỹ thuật recovery_target xung đột.
- Đặc tả của “-f” để gửi nội dung kết xuất tới đầu ra tiêu chuẩn là bắt buộc trong pg_restore.
- Độ dài mục nhập chỉ mục tối đa được giảm đi tám byte trong các chỉ mục B-Tree, để cải thiện việc xử lý các mục nhập trùng lặp. Thao tác REINDEX trên chỉ mục pg_upgrade'd từ phiên bản trước có thể không thành công.
- DROP IF TỒN TẠI CHỨC NĂNG / QUY TRÌNH / AGGREGATE / ROUTINE tạo ra lỗi nếu không có danh sách đối số nào được cung cấp và có nhiều đối tượng phù hợp.
Để biết thêm thông tin chi tiết về các tính năng PostgreSQL 12 mới và cân nhắc trước khi chuyển sang nó, bạn có thể tham khảo trang web Ghi chú phát hành chính thức.