PostgreSQL ra mắt loạt bản vá tháng 11/2026: cập nhật máy chủ và tiện ích mở rộng cùng lúc
PostgreSQL vừa phát hành các bản minor mới: 18.7, 17.12, 16.16, 15.20 và 14.25. Điểm khác biệt so với thường lệ là lần này người dùng kho RPM của PGDG (yum.postgresql.org hoặc zypp.postgresql.org) cần cập nhật máy chủ PostgreSQL và toàn bộ tiện ích mở rộng trong cùng một giao dịch, không nên cập nhật máy chủ trước rồi để tiện ích mở rộng sang tháng sau.
Vì sao tiện ích mở rộng gắn chặt với bản minor
Bản phát hành này chứa bản vá cho CVE-2026-6460. Bản vá thay đổi cách lưu trữ giá trị composite và thay đổi giao diện giữa máy chủ với tiện ích mở rộng theo hai điểm: DatumGetHeapTupleHeader() chuyển từ macro thành hàm trong máy chủ, và heap_getattr() giờ gọi hàm mới heap_datum_check().
Vì header được biên dịch vào tiện ích mở rộng, ảnh hưởng diễn ra theo cả hai chiều:
- Tiện ích mở rộng cũ chạy trên máy chủ mới vẫn tải được nhưng thiếu các kiểm tra của bản vá, nên có thể không được bảo vệ trước lỗ hổng.
- Tiện ích mở rộng mới chạy trên máy chủ cũ sẽ gọi các hàm mà máy chủ cũ không có, dẫn tới lỗi "undefined symbol" khi tải.
Do đó, máy chủ mới cần tiện ích mở rộng mới để an toàn, còn tiện ích mở rộng mới cần máy chủ mới để tải được. Đây là lý do toàn bộ tiện ích mở rộng trong kho đã được biên dịch lại theo các bản minor mới, cho mọi phiên bản PostgreSQL được hỗ trợ trên RHEL, Rocky Linux, AlmaLinux, Fedora, Amazon Linux, SLES và openSUSE Leap.
Thay đổi trong gói phần mềm
Trước đây gói tiện ích mở rộng chỉ yêu cầu phiên bản major của PostgreSQL. Từ các bản biên dịch lại này, mọi tiện ích mở rộng đã biên dịch đều yêu cầu tối thiểu bản minor hiện tại của major tương ứng, ví dụ tiện ích mở rộng cho PostgreSQL 18 có dòng Requires: postgresql18-libs >= 18.7. Gói máy chủ, client và contrib cũng yêu cầu đúng phiên bản postgresql18-libs như vậy, nên dnf hoặc zypper không thể cài tiện ích mở rộng mới bên cạnh máy chủ cũ. Quy trình này sẽ áp dụng cho mọi bản minor về sau, không chỉ tháng 11.
Khuyến nghị khi cập nhật
Người dùng nên chạy một lệnh cập nhật duy nhất: sudo dnf update trên RHEL, Rocky Linux, AlmaLinux, Fedora, Amazon Linux; hoặc sudo zypper update trên SLES và openSUSE Leap. Cơ chế phụ thuộc sẽ tự kéo theo máy chủ, client và libs mới. Khi gói máy chủ được cập nhật, dịch vụ PostgreSQL đang chạy sẽ được khởi động lại qua systemctl try-restart, nên cần dự trù thời gian gián đoạn ngắn như mọi bản minor.
Một số điều cần tránh:
- Giữ máy chủ ở phiên bản cũ bằng versionlock hoặc exclude=postgresql18*: dnf sẽ không cập nhật tiện ích mở rộng và báo không giải quyết được phụ thuộc, khiến bạn mất cả bản vá bảo mật lẫn bản dựng mới.
- Giữ tiện ích mở rộng ở phiên bản cũ: tiện ích mở rộng cũ vẫn tải được nhưng thiếu các kiểm tra của bản vá.
- Dùng --skip-broken hoặc --nobest: hệ thống sẽ ở trạng thái cập nhật dở dang.
- Sao chép RPM giữa các máy: gói tiện ích mở rộng dựng hôm nay không tải được trên máy chủ còn ở 18.6 trở về trước.
- Để máy chủ cũ tiếp tục chạy khi dịch vụ không do unit postgresql-18 quản lý, ví dụ dưới Patroni: cần tự khởi động lại PostgreSQL ngay sau khi cập nhật.
Những gì quá trình biên dịch lại phát hiện
Việc chạy lại kiểm thử hồi quy cho toàn bộ tiện ích mở rộng đã phát hiện ba gói cần sửa. Với pg_repack trên PostgreSQL 14 đến 18, một bài kiểm tra liệt kê tùy chọn cột không còn khớp do xuất hiện mục pg_attver=N trong pg_attribute.attoptions; nhóm phát triển đã loại pg_attver khỏi kiểm tra đó. Với rum, một truy vấn trong bài kiểm tra rum_validate truyền giá trị composite cho operator class cố tình hỏng và giờ báo lỗi "unrecognized operator"; chỉ truy vấn này bị loại bỏ.
Với pllua, đây là lỗi thực sự chứ không phải vấn đề kiểm thử. Các bản minor mới cũng sửa CVE-2026-120143: SPI_finish() giờ loại bỏ các cursor dùng bảng chuyển tiếp của trigger. pllua đóng kết nối SPI sau mỗi lần gọi, nên một hàm trigger lặp qua bảng chuyển tiếp bằng spi.rows() có thể làm sập máy chủ. Gói của PGDG đã có bản sửa và được gửi lên upstream qua pllua/pllua#19.
Lưu ý về PostgreSQL 14
PostgreSQL 14.25 là bản phát hành cuối cùng của dòng PostgreSQL 14. Gói của phiên bản này vẫn nhận bản vá và bản dựng lại hôm nay, nhưng sẽ không có bản cập nhật nào sau đó, nên người dùng cần lên kế hoạch nâng cấp lên major mới hơn. Nếu gặp lỗi khi cập nhật hoặc tiện ích mở rộng không tải được sau khi cập nhật, nên mở issue trên trình theo dõi của dự án và kèm đầu ra của rpm -qa | grep postgres cùng thông báo lỗi cụ thể.
Nguồn: Planet PostgreSQL
Trích nguồn từ: Planet PostgreSQL
Tags:
Bài viết liên quan
Postgres 18.7 phá vỡ tương thích ABI lần nữa
Bản cập nhật nhỏ Postgres 18.7 buộc phải thay đổi ABI để vá CVE-2026-6460, khiến các extension C phải biên dịch lại và nâng cấp đồng bộ với database.
Đọc thêm
Tìm kiếm vector PostgreSQL với pgvector và hybrid search trong Next.js
Hướng dẫn xây dựng tìm kiếm kết hợp từ khóa và vector trong PostgreSQL bằng pgvector, kết nối với Next.js Route Handler, áp dụng RLS theo tenant và đo độ chính xác của chỉ mục HNSW khi có bộ lọc.
Đọc thêm
B-tree trong PostgreSQL: trang chỉ mục có thứ tự và thưa dần sau VACUUM
Bài viết của Radim Marek mổ xẻ cấu trúc trang B-tree trong PostgreSQL: khác với heap page, trang chỉ mục được sắp xếp, liên kết với trang anh em và VACUUM không thể thu hồi không gian bên trong trang lá.
Đọc thêmCùng truy vấn, cùng index nhưng hiệu năng khác nhau khi chuyển PostgreSQL lên Azure
Câu chuyện khách hàng chuyển PostgreSQL lên Azure gặp truy vấn chậm gấp hàng chục lần dù vẫn dùng index scan, nguyên nhân nằm ở cách dữ liệu được sắp xếp trên đĩa chứ không phải index hay storage.
Đọc thêm
json và jsonb trong PostgreSQL: đo kích thước và tốc độ thực tế
So sánh json và jsonb trên PostgreSQL 17 và 18 với sáu dạng tài liệu, cho thấy jsonb có thể nhỏ hơn 23% hoặc lớn hơn 41%, kèm tốc độ đọc và chỉ mục GIN.
Đọc thêmPostgreSQL có thực sự đang thắng? Bằng chứng vượt xa các bảng xếp hạng
Bài viết của Dave Stokes tổng hợp khảo sát người dùng, các thương vụ mua bán công ty PostgreSQL, sản phẩm của đối thủ và lựa chọn của AI agent để lập luận PostgreSQL đang dẫn đầu mảng cơ sở dữ liệu vận hành.
Đọc thêmPostgreSQL, NUMA và điện toán đám mây: những lưu ý khi chạy trong VM và container
Bài cuối trong loạt 4 phần về PostgreSQL và NUMA, tập trung vào thách thức khi chạy PostgreSQL trên máy ảo và container trong môi trường đám mây, kèm các khuyến nghị thực hành.
Đọc thêm
Nâng cấp PostgreSQL tại chỗ không downtime trên cụm phân tán
Ahsan Hadi hướng dẫn nâng cấp tại chỗ từng node PostgreSQL từ 17.10 lên 18.6 trên cụm Spock đa master, giữ ứng dụng luôn có endpoint ghi trong khi mỗi node tạm ngừng vài phút.
Đọc thêm
UUIDv4 và UUIDv7 trên Postgres: cái giá của khóa chính ngẫu nhiên
So sánh ba loại khóa chính trên Postgres 18 cho thấy UUIDv4 chèn chậm hơn khóa có thứ tự và ghi WAL nhiều hơn đáng kể ở mức 100 triệu dòng.
Đọc thêm
Ilya Kosmodemiansky bàn về file cấu hình postgresql.conf "mặc định"
Bài đầu tiên trong loạt bốn phần của Ilya Kosmodemiansky (Data Egret) về cách PostgreSQL đọc cấu hình và nhóm thiết lập kết nối, dựa trên bản PostgreSQL 18.
Đọc thêm