Trang chủ Bài viết Cơ sở dữ liệu 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
Cơ sở dữ liệu 13/11/2026 2 lượt xem

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

Chia sẻ:

Bài viết liên quan

Zalo