Những điểm mới trong Postgres 19: phân tích sâu bản beta
(snowflake.com)- Bản beta tích hợp sẵn
REPACK CONCURRENTLYvào lõi cho cơ sở dữ liệu production quy mô lớn, cùng nhiều cải tiến rộng khắp về truy vấn đồ thị thuộc tính SQL, replication logic, VACUUM, hiệu năng, v.v. - Hỗ trợ gộp và tách partition cùng đồng bộ giá trị sequence, giúp thay đổi thiết kế và di chuyển dữ liệu khi đang vận hành trở nên dễ dàng hơn
- Autovacuum được bổ sung worker song song và hệ thống điểm ưu tiên, cải thiện thông lượng và khả năng quan sát của tác vụ bảo trì
- Với SQL/PGQ, có thể truy vấn dữ liệu hiện có dưới dạng đồ thị mà không cần từ bỏ mô hình quan hệ
- Trọng tâm không phải một tính năng tiêu đề đơn lẻ mà là độ bao phủ rộng (breadth), với tiến bộ đồng thời trên toàn bộ ứng dụng, vận hành, hiệu năng và khả năng mở rộng
REPACK được tích hợp mặc định
- Trong các môi trường vận hành lâu năm, nhu cầu thu hồi table bloat, viết lại bảng và tái tổ chức dữ liệu trong khi tránh các khóa đi kèm
VACUUM FULLhoặcCLUSTERlặp lại thường xuyên- Đã có một hệ sinh thái extension để giải quyết vấn đề này, tiêu biểu là
pg_repackđã lấp khoảng trống đó
- Đã có một hệ sinh thái extension để giải quyết vấn đề này, tiêu biểu là
- Postgres 19 đưa lệnh
REPACKvào lõi, bao gồm hỗ trợREPACK CONCURRENTLY- Đây được kỳ vọng là tính năng mà người dùng production sẽ chú ý hơn so với những gì độc giả trung bình của release note có thể dự đoán
Partitioning thực dụng hơn
- Postgres 19 bổ sung hỗ trợ gộp và tách partition
- Chiến lược partitioning thường được chọn với thông tin chưa đầy đủ; khi workload, thời gian lưu giữ hoặc tốc độ tăng dữ liệu thay đổi, một số partition có thể phình to hoặc trở nên quá nhỏ
- Khả năng tách/gộp giúp có dư địa để thiết kế tiến hóa theo thời gian mà không phải tái cấu trúc toàn bộ từ đầu
- Gộp partition Q1 và Q2 thành một partition duy nhất:
ALTER TABLE customer_orders MERGE PARTITIONS (orders_2026_q1, orders_2026_q2) INTO orders_2026_h1; - Có ví dụ
SPLIT PARTITIONđể tách partition Q3 theo từng tháng
- Gộp partition Q1 và Q2 thành một partition duy nhất:
Replication logic trưởng thành hơn
- Replication logic hữu ích cho migration, upgrade, hệ thống reporting, di chuyển dữ liệu, replication chọn lọc, high availability và workflow vận hành
- Cải tiến lớn nhất là đồng bộ giá trị sequence, giúp subscriber khớp với publisher tốt hơn
- Khi replicate mà không có trạng thái sequence, dữ liệu vẫn được di chuyển nhưng sau cutover có thể phát sinh vấn đề do ID được tạo tiếp theo bị lệch
- Bổ sung hỗ trợ
ALL SEQUENCEStrong publication, báo cáo lỗi đồng bộ sequence và cải thiện hành vi làm mới subscription liên quan đến sequence
- Có thể dùng mệnh đề
EXCEPTkhi publication đăng tất cả bảng nhưng muốn loại trừ một số bảng wal_level = replicatự động bật replication logic khi cần;effective_wal_levelmới báo cáo hành vi thực tế, giúp giảm lỗi cấu hình và tăng khả năng quan sát
Autovacuum thông minh hơn và dễ quan sát hơn
- Autovacuum có thể sử dụng vacuum worker song song, có thể kiểm soát ở cấp toàn cục và cấp bảng
- Ví dụ cấu hình toàn cục:
ALTER SYSTEM SET autovacuum_max_parallel_workers = 4;
- Ví dụ cấu hình toàn cục:
- Hệ thống điểm mới để kiểm soát thứ tự các bảng được vacuum, cải thiện việc đánh giá ưu tiên xem bảng nào khẩn cấp nhất
- Ví dụ điều chỉnh trọng số theo bảng: mức khẩn cấp vacuum dựa trên insert là 3.0, mức khẩn cấp vacuum update/delete thông thường là 0.5
- View
pg_stat_autovacuum_scoresmới cung cấp khả năng quan sát quá trình ra quyết định- Thông tin chi tiết trong các view tiến trình vacuum/analyze, mức dùng bộ nhớ và song song hóa trong
VACUUM VERBOSEvà log autovacuum, cùnglog_autoanalyze_min_durationriêng giúp tăng khả năng quan sát bảo trì
- Thông tin chi tiết trong các view tiến trình vacuum/analyze, mức dùng bộ nhớ và song song hóa trong
Bổ sung truy vấn đồ thị thuộc tính SQL
- Thêm SQL/PGQ (SQL property graph queries)
- Các workload nơi mô hình đỉnh/cạnh hữu ích gồm phát hiện gian lận, gợi ý, phân tích mạng, đồ thị quyền, chuỗi cung ứng, sơ đồ tổ chức, v.v.
- Ví dụ định nghĩa đồ thị thuộc tính: chỉ định VERTEX TABLES và EDGE TABLES bằng
CREATE PROPERTY GRAPH store_graph
- Cách tiếp cận là bổ sung một phương thức khác để truy vấn dữ liệu đã có, không từ bỏ mô hình quan hệ
- Cùng hướng đi như JSONB, tìm kiếm toàn văn và extension trước đây, vốn không ép thay đổi kiến trúc hiện có
- Từ góc nhìn lập trình viên, có thể dùng truy vấn dạng đồ thị mà không tăng thêm datastore riêng, đường đồng bộ, bề mặt vận hành hay đối tượng phải debug lúc 2 giờ sáng
COPY hữu dụng hơn
COPY FROMhỗ trợ bỏ qua nhiều dòng header- Hữu ích khi xử lý CSV export từ vendor, công cụ nội bộ hoặc file có thêm các dòng metadata ở đầu
COPY FROMthêmON_ERROR SET_NULLđể đặt giá trị nhập sai thành null, cung cấp lựa chọn giữa “toàn bộ load thất bại” và “làm sạch trước”- Có ví dụ load file trong đó cột price lẫn các giá trị 'N/A' và 'MISSING'
COPY TOcó thể xuất định dạng JSON, bao gồm một mảng JSON duy nhất; cũng có thể xuất trực tiếp bảng partition (trước đây cầnCOPY (SELECT ...))- Ví dụ xuất bảng thành một mảng JSON hợp lệ:
WITH (FORMAT JSON, ARRAY true)
- Ví dụ xuất bảng thành một mảng JSON hợp lệ:
Cải thiện tiện ích SQL
GROUP BY ALLtự động nhóm các biểu thức trong danh sách đích không phải aggregate và không phải window, giúp viết SQL thăm dò và truy vấn reporting gọn hơn- Hỗ trợ
IGNORE NULLSvàRESPECT NULLScho window function được bổ sung vàolead,lag,first_value,last_value,nth_value - Thêm
INSERT ... ON CONFLICT DO SELECT ... RETURNINGđể trả về trực tiếp hơn hàng bị xung đột trong upsert - Thêm
UPDATEvàDELETE FOR PORTION OFđể tiếp tục hỗ trợ tác vụ liên quan đến thời gian (temporal), bao gồm các hàm thời gianRANDOM()mở rộng
Cải thiện hiệu năng trên diện rộng
- Planner và executor có nhiều cải tiến về anti-join, semi-join, constant folding, incremental sort cho append path, xử lý aggregate trước join, tính độ chọn lọc của join, thống kê hàm, v.v.
- Postgres tiến hóa theo hướng nhận diện tốt hơn các dạng truy vấn phổ biến và giảm công việc không cần thiết
- Một số xử lý aggregate được thực hiện trước join, giảm số hàng cần xử lý
- Nhiều trường hợp
NOT INvàLEFT JOINhơn được chuyển thành anti-join hiệu quả - Khả năng quan sát Memoize trong
EXPLAINđược cải thiện, radix sort cải thiện hiệu năng sắp xếp, kiểm tra ràng buộc khóa ngoại nhanh hơn, và SIMD được dùng cho đầu vào text/CSV củaCOPY FROM
- Trong nhiều trường hợp, chỉ cần upgrade là có hành vi tốt hơn mà không cần thay đổi mã ứng dụng
Vì sao Postgres 19 quan trọng
- Điểm nổi bật không phải một tính năng đơn lẻ mà là độ bao phủ rộng (breadth)
- Cho lập trình viên ứng dụng: truy vấn đồ thị, cú pháp SQL được cải thiện, window function tốt hơn, hành vi upsert tốt hơn
- Cho người vận hành:
REPACK CONCURRENTLY, autovacuum được cải thiện, monitoring tốt hơn, thay đổi checksum online, khả năng quan sát replication rộng hơn - Cho người dùng chú trọng hiệu năng: cải tiến planner, cải tiến SIMD, khả năng quan sát I/O bất đồng bộ, kiểm tra khóa ngoại nhanh, sắp xếp tốt hơn
- Cho người xây dựng trên Postgres: hook mới, module tư vấn planner, cải tiến extension, truy xuất thống kê FDW, tiếp tục đầu tư vào hệ sinh thái extension
- Postgres đang tiến hóa đồng thời không chỉ cho một workload hay một persona, mà như một cơ sở dữ liệu và nền tảng cho ứng dụng, vận hành, phân tích và mở rộng
- Vì chưa phải GA, đây là lúc để thử nghiệm — chạy ứng dụng, kiểm tra migration, rà soát extension, kiểm tra plan của các truy vấn chính, kiểm tra replication logic và workflow bảo trì
1 bình luận
Các ý kiến trên Hacker News
Tôi đã dùng Postgres, Oracle, MS SQL Server, MySQL trong các dự án thực tế; SQLite thì chưa dùng sâu nhưng biết đây là một lựa chọn tuyệt vời
Dạo này, vì lợi ích của chính mình, tôi luôn tránh Oracle và MySQL/MariaDB
Postgres rất tuyệt, nhưng tôi ước nó có kết nối nhẹ hơn và materialized view được cập nhật đồng bộ. Dù connection pooler có cải thiện tình hình, mức dùng bộ nhớ cho mỗi kết nối đồng thời vẫn lớn một cách bất thường; và những tính năng như indexed view của SQL Server cho phép triển khai các tình huống dữ liệu phức tạp một cách thanh nhã, đơn giản và luôn đúng
SQL Server có thể đắt, nhưng trong nhiều trường hợp đáng đồng tiền, và nếu chọn kho dữ liệu cẩn thận thì có thể giảm rất nhiều rắc rối trong tương lai
Nếu dùng nhà cung cấp miễn phí thì khó có gì vượt được SQLite, và hiện nó đáp ứng được phần lớn use case. Tuy vậy, nó bắt đầu hụt hơi ở mảng sao lưu, sao chép và công cụ. Nếu phải chịu trách nhiệm về tính sẵn sàng của hệ thống và khôi phục sau thảm họa, tôi không ngại chi tiền để giảm rủi ro
Nếu đã định trả dù chỉ một ít tiền, tôi sẽ đi đến cùng. Trải nghiệm lập trình viên quanh MSSQL là vô song; SSMS và SQL project của Visual Studio, theo tôi, tốt hơn nhiều so với các kiểu Entity Framework hiện nay. Cộng thêm công cụ bên thứ ba như RedGate thì có thể thay thế cả những gói tư vấn trị giá hàng triệu đô
Tôi sẽ không đề xuất dựng máy chủ Oracle hay DB2 mới, nhưng nếu đã có sẵn thì có lẽ tôi sẽ phản đối đến cùng việc refactor để loại bỏ chúng. Những cơ sở dữ liệu như vậy thường đi kèm vô số “chuyện kinh dị”, và nếu không còn lựa chọn nào khác mà phải tái hiện các tác dụng phụ kỳ quặc đó trên engine mới, bản thân doanh nghiệp có thể bị phá hỏng
Với tư cách DBA, nếu đã làm nhiều tác vụ DBA nặng, Postgres ở một đẳng cấp khác so với SQL Server. Postgres native trên Linux và là mã nguồn mở, nên độ linh hoạt, khả năng quan sát nội bộ và khả năng vận hành không thể so với SQL Server
Trong bối cảnh công nghệ hiện nay, tôi xem SQL Server về cơ bản đã chết. Các công ty dùng nó chỉ là những tổ chức legacy xoay quanh Windows, và ngay cả những nơi đó cũng đang ít dần
Sẽ tốt hơn nữa nếu có cả tùy chọn cập nhật trì hoãn. Đó là cách gom nhiều update lại xử lý một lần, chỉ xét các bản ghi đã thay đổi kể từ lần refresh cuối; tôi không rõ Oracle làm việc này về mặt kỹ thuật như thế nào. Tính năng này có lẽ sẽ là một bổ sung tuyệt vời so với gần như mọi cơ sở dữ liệu OLTP mã nguồn mở
Tôi cũng rất tò mò về dự án OrioleDB: https://github.com/orioledb/orioledb/releases
Vài năm trước, tôi đã khá khổ sở vì vacuum khi có rất nhiều thao tác chèn/xóa ngẫu nhiên liên tục trên một nơi giống bảng tạm. Tôi giải quyết bằng cách gom thêm thay đổi trong RAM rồi flush xuống bảng để tăng số hàng thay đổi trên mỗi page, nhưng đã rất vất vả để tìm được điểm cân bằng tốt
Với tư cách người đã dùng Postgres hơn 15 năm trong lĩnh vực khoa học, tôi bắt đầu lo ngại việc PostgreSQL không có lưu trữ hướng cột
Khi dataset ngày càng lớn, giới hạn của storage trong PG càng trở nên rõ hơn. Nhiều extension như cetus có thể cung cấp tính năng này, nhưng như vậy sẽ phải phụ thuộc vào việc extension đó có tiếp tục được hỗ trợ hay không, đồng thời độ phức tạp cũng tăng lên
Ban đầu tôi nghĩ nếu dùng bảng Postgres làm storage và dùng executor của Postgres thì overhead cố hữu sẽ quá lớn; nếu đạt được hiệu năng ngang Timescale thì đã khá tuyệt. Tôi không nghĩ nó có thể tiến gần tới một cơ sở dữ liệu phân tích chuyên dụng
Nhưng khi dự án tiến triển, hiệu năng tiếp tục được cải thiện, và giờ tôi chắc chắn ủng hộ hướng làm workload phân tích bằng Postgres + extension
Nó giống như lo rằng Apple không bán máy giặt vậy
Ngày nay, nhiều công ty dùng thêm cơ sở dữ liệu key-value hoặc document store song song với cơ sở dữ liệu quan hệ trong ứng dụng chính
Tôi không hiểu vì sao lại không nhắc đến việc PostgreSQL 19 đưa vào hỗ trợ dữ liệu thời gian application-time native dựa trên chuẩn SQL:2011: https://www.depesz.com/2026/04/02/waiting-for-postgresql-19-...
_archive: https://www.postgresql.org/docs/current/tcn.htmlNếu tính năng này trở thành native thì, như phần lớn các triển khai của PostgreSQL, nó sẽ thực sự tuyệt vời
https://news.ycombinator.com/item?id=48413655
Tôi không phân biệt được liệu bài này dùng văn phong bị lấy mẫu quá nhiều trong dữ liệu huấn luyện LLM, hay đã dùng AI khá nhiều để chỉnh sửa bài viết. Tôi nghiêng về khả năng sau
Tôi cho rằng việc Claude viết những câu kiểu “với tư cách là người đã làm X trong nhiều năm” là một dạng lỗi alignment. LLM không nên viết như thể nó có trải nghiệm cá nhân. Dữ liệu huấn luyện có thể có người nói theo cách đó, nhưng dù là một chuỗi token có vẻ hợp lý về mặt thống kê, tôi nghĩ LLM không nên tuyên bố có những trải nghiệm sống mà nó không có
Tôi thích các cải tiến về COPY và logical replication. Hiện tại tôi đang sao lưu cơ sở dữ liệu PG sang một instance Databasus sidecar, mà nó còn nặng hơn cả toàn bộ backend + DB + Caddy
Dưới đây là lời phàn nàn về văn phong LLM
Nếu phải đọc những câu như “Chỉ riêng điều đó cũng cho thấy: người dùng có nhu cầu thực sự, và hệ sinh thái đã lấp khoảng trống đó”, “Nó trông đơn giản nhưng giải quyết các vấn đề vận hành thực tế”, “Nó không thay đổi thế giới, nhưng khiến các workflow dữ liệu hằng ngày tốt hơn”, có lẽ nếu Orwell còn sống đến giờ, ông đã tuyên bố mù chữ tiếng Anh và đi học tiếng Klingon
Tính năng cơ sở dữ liệu đồ thị trông có vẻ thú vị, nhưng cú pháp
GRAPH_TABLEthì quá khủng khiếpSELECT customer_name FROM GRAPH_TABLE (myshop MATCH (c IS customers)-[IS customer_orders]->(o IS orders WHERE o.ordered_when = current_date) COLUMNS (c.name AS customer_name));Nó làm tôi nhớ đến neo4j, nhưng tôi không nghĩ đó là thứ mà một công cụ nghiêm túc vào năm 2026 nên sao chép nguyên xi
Rốt cuộc điều tôi tò mò là tốc độ. row-level security là một tính năng rất hữu ích, nhưng cố xây thứ gì đó nghiêm túc bằng triển khai của Postgres là liều lĩnh. Vì planner sẽ rối tung và nó match từng hàng, phá hỏng hiệu năng
Nó là SQL/PGQ, bắt nguồn từ ngôn ngữ Cypher của Neo4J và giờ đã là một phần của chuẩn SQL
Tôi mong PostgreSQL có thêm nén khối chứ không chỉ nén hàng. Chỉ nén hàng thì hiệu quả quá hạn chế
Có thể đặt dữ liệu trên ZFS pool và bật nén khối, nhưng nếu được hỗ trợ native thì sẽ giảm gánh nặng cấu hình và có thể hiệu năng cũng tốt hơn
GROUP BY ALL nghĩ kỹ thì thật sự rất hợp lý, nhưng trước đây tôi chưa từng nghĩ đến nên thấy khá thú vị
Từ góc nhìn gần với DevOps, tôi mong PostgreSQL cuối cùng cũng hỗ trợ nâng cấp tại chỗ giữa các major version liên tiếp
Phần lớn các bản phân phối có thể xử lý đặc tính phiền phức là phải chạy cả phiên bản cũ lẫn mới cho
pg_upgrade, nhưng nếu dùng Docker thì việc nâng cấp lên major version mới thật sự rất đau đớnThật vui khi GROUP BY ALL được đưa vào. Theo tôi biết thì đây là khái niệm do DuckDB giới thiệu
Tài liệu DuckDB cũng nói rằng nhiều tính năng được DuckDB giới thiệu đầu tiên, và các tính năng như
GROUP BY ALLsau đó đã được các hệ thống khác áp dụnghttps://duckdb.org/docs/lts/sql/dialect/friendly_sql