TopGit
Đánh giá repo GitHub

pgrust: Bản viết lại Postgres bằng Rust

malisper/pgrust

pgrust là bản viết lại Postgres bằng Rust, đặt mục tiêu hành xử đúng y như Postgres 18.3 thay vì tạo ra một cơ sở dữ liệu mới. Nó dùng chính bộ regression test của Postgres làm thước đo đúng-sai, tương thích ở mức đĩa với Postgres, và có thể boot thẳng từ một thư mục dữ liệu Postgres 18.3 sẵn có. Tác giả xây dựng nó bằng Rust cộng với lập trình có AI hỗ trợ, và đây là một thử nghiệm, không phải một cơ sở dữ liệu cho production.

Ppgrust: Bản viết lại Postgres bằng Rust — open-source GitHub repository preview
Nhận định nhanh

Hãy chọn pgrust nếu bạn tò mò một engine tương thích Postgres trông thế nào khi viết bằng Rust, muốn mày mò phần lõi máy chủ trong một ngôn ngữ an toàn bộ nhớ, hoặc thích theo dõi các bản viết lại có AI hỗ trợ cho những codebase C khổng lồ. Bỏ qua nếu bạn cần một cơ sở dữ liệu để chạy bất cứ thứ gì thật hôm nay: chính README nói nó chưa sẵn sàng cho production và chưa tối ưu hiệu năng, và những con số bắt mắt '100% regression test, nhanh hơn 50%, gấp 300x về phân tích' là mô tả một phiên bản chưa được phát hành.

Sao
★ 0
Fork
⑂ 0
Ngôn ngữ
Giấy phép
Xem trong repo
Chủ đề
Cập nhật
Jul 2026
Trang chủ
GitHub

Vấn đề nó giải quyết

Thay đổi Postgres từ bên trong rất khó. Codebase là hàng chục năm code C, mô hình process-per-connection và cơ chế lưu trữ dựa trên vacuum đã ăn sâu, và thử nghiệm với phần lõi máy chủ nghĩa là phải chống chọi rất nhiều di sản trước khi kiểm tra được một ý tưởng. pgrust ra đời để làm việc đó dễ hơn: giữ hành vi đúng dáng Postgres và lấy chính các test thật của Postgres làm trọng tài, nhưng chuyển sang Rust để những thay đổi sâu hơn về luồng, lưu trữ và xử lý truy vấn an toàn hơn khi thử.

Đây là gì?

pgrust là bản viết lại Postgres bằng Rust, nhắm tới tương thích với Postgres 18.3. Nó tương thích ở mức đĩa, nên có thể khởi động từ một thư mục dữ liệu Postgres 18.3 sẵn có, và tự kiểm chứng bằng chính bộ regression test của Postgres thay vì một bộ test tự viết. README nói bản hiện có khớp đầu ra kỳ vọng của Postgres trên hơn 46.000 truy vấn regression. Một phiên bản mới hơn, chưa được phát hành, được mô tả là vượt qua 100% bộ test với mô hình thread-per-connection, nhưng code đó chưa ra mắt. Dự án dùng giấy phép AGPL-3.0 và công khai là mang tính thử nghiệm.

Vì sao đang được chú ý

Một bản viết lại Postgres từ đầu mà chạy được bộ regression test thật của Postgres và boot được thư mục dữ liệu 18.3 sẵn có là một cách tiếp cận rất cụ thể cho ý tưởng 'viết lại bằng Rust', và tác giả công khai chuyện dùng lập trình có AI hỗ trợ để làm điều đó. Tuyên bố trong README về một phiên bản sắp tới vượt 100% regression test, nhanh hơn 50% ở giao dịch và nhanh gấp khoảng 300x ở khối lượng phân tích (theo benchmark riêng của họ thì chậm hơn ClickHouse khoảng 2x trên clickbench) đúng là loại con số khiến người ta chú ý, dù bản đó chưa được ship.

Số sao GitHub của repo này thay đổi thế nào theo thời gian. Nguồn: star-history.com.Xem lịch sử sao

Tính năng chính

  • Tương thích ở mức đĩa với Postgres 18.3 — boot từ thư mục dữ liệu Postgres sẵn có, không cần dump và restore
  • Dùng chính bộ regression test của Postgres làm thước đo đúng-sai; bản hiện có khớp đầu ra kỳ vọng trên hơn 46.000 truy vấn
  • Viết bằng Rust và xây dựng với lập trình có AI hỗ trợ, theo tác giả
  • Đường thử-trước-khi-build: một demo WebAssembly tại pgrust.com và một image Docker (malisper/pgrust:v0.1)
  • Kèm sẵn các file test Postgres 18.3 vendored cùng một runner scripts/run-regression để bạn tự kiểm chứng tương thích
  • Các mục trong roadmap gồm phần lõi đa luồng, connection pooling tích hợp sẵn, và các thử nghiệm lưu trữ không-vacuum

Trường hợp dùng tốt nhất

  • Thử nghiệm phần lõi máy chủ Postgres trong một ngôn ngữ an toàn bộ nhớ thay vì C
  • Thử một engine tương thích Postgres trên chính thư mục dữ liệu 18.3 sẵn có của bạn
  • Theo dõi cách lập trình có AI hỗ trợ được áp dụng cho một bản viết lại hệ thống lớn
  • Chạy bộ regression test của Postgres trên một bản triển khai thay thế để xem nó lệch ở đâu

Cách cài đặt / dùng thử

Đường nhanh nhất là image Docker — không cần build: `docker run -d --name pgrust -e POSTGRES_PASSWORD=secret malisper/pgrust:v0.1` rồi kết nối bằng client `psql` đi kèm, hoặc mở demo WebAssembly tại pgrust.com mà không cần cài gì cả. Để build từ nguồn bạn cần Rust cộng các thư viện hệ thống (trên macOS: `brew install icu4c openssl@3 libpq`; trên Debian/Ubuntu: `build-essential pkg-config libicu-dev libssl-dev libldap2-dev libpam0g-dev postgresql-client-18`), rồi `PGRUST_PGSHAREDIR="$PWD/vendor/postgres-18.3/share" cargo build --release --locked --bin postgres`.

Cách sử dụng

Sau khi build, khởi tạo thư mục dữ liệu bằng `target/release/postgres --initdb -D /tmp/pgrust-data -L "$PWD/vendor/postgres-18.3/share" --no-locale --encoding UTF8 -U postgres`, chạy binary máy chủ, rồi kết nối bằng `psql` của Postgres 18: `psql -h /tmp -p 5432 -U postgres -d postgres`. Để tự kiểm tra tương thích, chạy bộ regression test vendored bằng `PGRUST_BIN="$PWD/target/release/postgres" scripts/run-regression` (cần một `psql` Postgres 18 trên PATH). pgrust cũng có thể boot thẳng từ một thư mục dữ liệu Postgres 18.3 sẵn có.

Điểm mạnh

  • Dùng chính bộ regression test của Postgres làm thước đo, nên 'tương thích' nghĩa là khớp đầu ra Postgres thật, không phải một bộ test tự chấm điểm
  • Tương thích mức đĩa nghĩa là bạn có thể trỏ nó vào một thư mục dữ liệu Postgres 18.3 sẵn có mà không cần dump-and-restore
  • Bạn có thể thử trong trình duyệt (WASM) hoặc bằng một lệnh Docker trước khi bỏ công build từ nguồn
  • Rust mang lại an toàn bộ nhớ cho một loại code mà ở C đã có bề dày lịch sử về những lỗi tinh vi

Hạn chế & rủi ro

  • README nói thẳng rằng pgrust chưa sẵn sàng cho production và chưa được tối ưu hiệu năng
  • Những con số nổi bật 100% pass, nhanh hơn 50%, và ~300x về phân tích là mô tả một phiên bản chưa phát hành — code bạn chạy được hôm nay khớp hơn 46.000 truy vấn regression, chứ chưa phải toàn bộ
  • Các extension và ngôn ngữ thủ tục sẵn có như PL/Python, PL/Perl và PL/Tcl nhìn chung chưa tương thích
  • AGPL-3.0 là giấy phép copyleft mạnh mà nhiều công ty tránh dùng cho phần mềm phía máy chủ, vì việc dùng qua mạng có thể kích hoạt nghĩa vụ chia sẻ mã nguồn
  • Một bản viết lại cơ sở dữ liệu có AI hỗ trợ vốn dĩ rủi ro cao về những lỗi đúng-sai tinh vi mà bộ regression test không phải lúc nào cũng bắt được
Xem trên GitHub

Lựa chọn thay thế

PostgreSQL — bản triển khai C gốc mà pgrust phản chiếu, và là tham chiếu cho mọi tuyên bố tương thíchNeon — Postgres serverless với một lớp lưu trữ dựa trên Rust tách rời compute và storageCockroachDB — một cơ sở dữ liệu SQL phân tán, tương thích giao thức Postgres (viết bằng Go)Materialize — một cơ sở dữ liệu Rust tập trung vào streaming và truy vấn phân tích tăng dầnClickHouse — cơ sở dữ liệu phân tích mà README dùng để benchmark phiên bản tương lai của pgrust

Ai nên thử — và ai nên bỏ qua

pgrust dành cho các kỹ sư tò mò về cơ sở dữ liệu, lập trình viên hệ thống Rust, và những người muốn theo dõi một bản viết lại Postgres có AI hỗ trợ diễn ra — bất kỳ ai coi trọng việc mày mò phần lõi hơn là chạy một workload. Nếu bạn cần một cơ sở dữ liệu cho bất cứ việc gì thật, hoặc không thể chấp nhận AGPL-3.0, thì đây chưa phải là nó; hãy chạy PostgreSQL tiêu chuẩn và theo dõi các cập nhật của pgrust.

Câu hỏi thường gặp

pgrust là gì?

pgrust là bản viết lại Postgres bằng Rust, nhắm tới tương thích với Postgres 18.3. Nó tương thích ở mức đĩa, có thể boot từ một thư mục dữ liệu 18.3 sẵn có, và tự kiểm chứng bằng chính bộ regression test thật của Postgres. Tác giả xây dựng nó bằng Rust cộng lập trình có AI hỗ trợ.

pgrust đã sẵn sàng cho production chưa?

Chưa. README nói rõ ràng rằng pgrust chưa sẵn sàng cho production và chưa được tối ưu hiệu năng. Nó là một thử nghiệm để khám phá phần lõi Postgres, không phải một cơ sở dữ liệu cắm-là-chạy cho workload thật.

pgrust có thật sự vượt qua 100% regression test của Postgres không?

Không phải ở bản bạn chạy được hôm nay. README nói bản hiện có khớp đầu ra kỳ vọng trên hơn 46.000 truy vấn regression, còn một phiên bản mới hơn, chưa phát hành, được mô tả là vượt 100% bộ test. Hãy coi con số 100% là tuyên bố về code sắp tới, chưa ra mắt.

pgrust có dùng được dữ liệu Postgres sẵn có của tôi không?

README nói pgrust tương thích ở mức đĩa với Postgres và có thể boot từ một thư mục dữ liệu Postgres 18.3 sẵn có, nên về nguyên tắc bạn có thể trỏ nó vào dữ liệu do Postgres 18.3 thật tạo ra — nhưng vì trạng thái chưa-sẵn-sàng-production, chỉ nên làm vậy với bản sao mà bạn không ngại mất.

pgrust dùng giấy phép gì?

pgrust dùng giấy phép AGPL-3.0, một giấy phép copyleft mạnh. Điều này quan trọng với phần mềm máy chủ vì cung cấp nó qua mạng có thể kích hoạt nghĩa vụ chia sẻ mã nguồn của bạn, đó là lý do một số công ty tránh phụ thuộc AGPL.

Nguồn & ghi công

Dựa trên kho GitHub chính thức malisper/pgrust, bao gồm README và metadata của dự án.

Về TopGit