WEBSITE ĐANG PHÁT TRIỂN

PostgreSQL vs SQL Server - quyết định tôi đã đưa ra và tại sao

Không có database "tốt hơn". Có database phù hợp hơn với context của bạn. Tôi dùng SQL Server 20 năm và PostgreSQL 5 năm - cả hai đều excellent, nhưng chúng khác nhau ở những trade-off quan trọng mà architect cần hiểu rõ. Năm 2019, tôi nhận một project mới - một startup fintech đang xây MVP. Họ hỏi tôi: "Anh Son, chúng tôi nên dùng database gì?" Câu hỏi đơn giản. Nhưng tôi không trả lời ngay. Thay vào đó, tôi hỏi lại: "Tech stack của team là gì? Ai sẽ maintain database này sau khi tôi đi? Infrastructure của các bạn là on-premise hay cloud? Budget cho licensing là bao nhiêu?" Họ nhìn tôi hơi ngớ ngẩn. Họ expected một câu trả lời technical - benchmark performance, feature comparison. Tôi lại hỏi về organization và budget. Vì đó mới là thứ thực sự quyết định.

Background của tôi: 20 năm SQL Server, 5 năm PostgreSQL

Tôi là người .NET từ thời .NET Framework 1.1. Cả sự nghiệp gắn với Microsoft stack - SQL Server, Azure SQL, Entity Framework. Tôi biết SQL Server rất sâu: execution plans, clustered vs non-clustered indexes, columnstore, Always On AG, TDE, row-level security.

Năm 2019, lần đầu tiên tôi chủ động chọn PostgreSQL cho một dự án production. Lý do ban đầu là đơn giản: startup không muốn trả license SQL Server, họ đang deploy lên Linux containers, và team có một developer từ background open source.

5 năm sau, tôi đã làm với PostgreSQL trên ít nhất 8 dự án khác nhau. Và tôi có quan điểm thực chiến hơn nhiều so với benchmark paper.


Deep-dive kỹ thuật: Sự khác biệt thực sự quan trọng

1. Licensing và cost - không thể bỏ qua

SQL Server:

  • SQL Server Standard: ~$900/core/năm (Enterprise: ~$3700/core/năm)
  • Azure SQL Database: Từ $15/tháng (Basic) đến $750+/tháng cho production workload
  • Free tiers: SQL Server Express (giới hạn 10GB, 1GB RAM), Developer edition (không dùng production)

PostgreSQL:

  • Hoàn toàn free, open source (PostgreSQL License)
  • Cloud managed: AWS RDS PostgreSQL, Azure Database for PostgreSQL, Google Cloud SQL - pricing cạnh tranh hơn SQL Server managed

Với startup, đây thường là yếu tố quyết định. Với enterprise đã có Microsoft EA (Enterprise Agreement), SQL Server licensing có thể đã được cover - lúc này PostgreSQL không có lợi thế cost nữa.

2. Ecosystem và tooling

SQL Server mạnh hơn ở:

  • SSMS (SQL Server Management Studio): GUI tốt nhất trong ngành, không phải bàn cãi
  • SQL Server Profiler / Extended Events: Deep query analysis
  • Reporting Services (SSRS): Built-in reporting stack
  • Integration Services (SSIS): ETL native
  • Always On Availability Groups: HA/DR setup được tested và documented kỹ lưỡng
  • .NET integration: EF Core, Dapper trên SQL Server có nhiều edge case được handle tốt hơn

PostgreSQL mạnh hơn ở:

  • Extensions ecosystem: PostGIS (geospatial), pg_trgm (fuzzy search), TimescaleDB (time-series), pgvector (vector search cho AI)
  • JSON/JSONB: Native JSON document store với indexing tốt hơn SQL Server JSON
  • Full-text search: Built-in FTS tốt hơn SQL Server FTS cho nhiều language
  • Table partitioning: Linh hoạt hơn SQL Server partition schemes
  • Open source: Community extensions, no vendor lock-in

3. Performance - context matters

Tôi không tin vào benchmark trên internet vì benchmark đó không có context của bạn. Nhưng có một số pattern tôi observe:

  • OLTP workload với simple reads/writes: Tương đương nhau ở cùng hardware
  • Complex analytical queries: SQL Server columnstore + in-memory OLTP rất mạnh
  • Write-heavy workload với concurrent transactions: PostgreSQL MVCC model thường handle tốt hơn
  • Full-text search: PostgreSQL thường beat SQL Server FTS nếu dùng extensions đúng
  • JSON heavy workload: PostgreSQL JSONB có index tốt hơn đáng kể

4. .NET integration năm 2026

Với EF Core 9+, cả hai đều được support excellent:

// SQL Server
builder.Services.AddDbContext<AppDbContext>(options =>
    options.UseSqlServer(connectionString,
        sqlOptions => sqlOptions.EnableRetryOnFailure(3)));

// PostgreSQL với Npgsql
builder.Services.AddDbContext<AppDbContext>(options =>
    options.UseNpgsql(connectionString,
        npgsqlOptions => npgsqlOptions.EnableRetryOnFailure(3)));

Sự khác biệt chủ yếu ở:

  • DateTimeOffset: PostgreSQL dùng timestamp with time zone, mapping phức tạp hơn một chút
  • String collation: PostgreSQL case-sensitive by default, SQL Server case-insensitive by default
  • Sequences vs Identity: PostgreSQL dùng sequences, cần configure nếu muốn behavior giống SQL Server
  • Bulk insert: SqlBulkCopy (SQL Server) rất nhanh; PostgreSQL có COPY command nhưng cần thêm work với EF Core

Kinh nghiệm dự án: Khi tôi chọn mỗi cái

Chọn SQL Server khi:

Một khách hàng lớn của tôi - công ty logistics với hệ thống có từ năm 2008 - họ muốn migrate từ on-premise SQL Server sang cloud. Tôi recommend Azure SQL Database (managed SQL Server):

  • Team DBA của họ biết SQL Server sâu từ 15 năm
  • Có SQL Server Enterprise license trong Microsoft EA
  • Sử dụng SSIS cho ETL, SSRS cho reporting
  • On-call playbook đã được viết cho SQL Server

Migrate sang PostgreSQL ở đây sẽ là rủi ro không cần thiết. ROI âm.

Chọn PostgreSQL khi:

Một startup khác - e-commerce với catalog >10 triệu sản phẩm, cần full-text search tiếng Việt, deployment trên Kubernetes. Tôi recommend PostgreSQL + pgvector + pg_trgm:

  • No existing SQL Server investment
  • Team full-stack JavaScript/TypeScript với một .NET backend dev
  • Cần fuzzy search, geospatial features cho "tìm cửa hàng gần nhất"
  • Budget startup - PostgreSQL on GCP Cloud SQL rẻ hơn Azure SQL Database đáng kể

Framework quyết định của tôi

Khi ai hỏi SQL Server hay PostgreSQL, tôi đi qua checklist này:

1. Team knowledge

Team của bạn đã biết cái nào? Learning curve cho database production có thể mất 6-12 tháng để thực sự comfortable. Đừng underestimate.

2. Existing investment

Có SQL Server license không? Có DBA biết SQL Server không? Có existing infrastructure? Nếu có - SQL Server có thể rẻ hơn khi tính total cost.

3. Cloud strategy

Nếu Azure-first: Azure SQL Database mature và well-integrated hơn. Nếu AWS hoặc GCP: RDS PostgreSQL hay Cloud SQL PostgreSQL thường performance/price tốt hơn.

4. Specific feature requirements

Cần PostGIS? PostgreSQL. Cần pgvector cho AI/embedding search? PostgreSQL. Cần SSRS reporting? SQL Server. Cần native JSON document với complex queries? PostgreSQL JSONB thắng.

5. Long-term ownership

Ai sẽ maintain sau 3-5 năm? Recruit DBA SQL Server hay PostgreSQL dễ hơn ở market của bạn?


Triết lý: Vendor lock-in vs ecosystem fit

Có một argument thường gặp: "PostgreSQL open source, tránh vendor lock-in."

Tôi không hoàn toàn đồng ý với framing này. Vendor lock-in có nhiều dạng:

  • SQL Server: Lock-in với Microsoft, nhưng mature ecosystem, excellent tooling, well-tested HA
  • PostgreSQL: "Free" nhưng nếu dùng RDS PostgreSQL hay Azure Database for PostgreSQL, bạn vẫn lock-in với cloud vendor - chỉ là ở tầng infrastructure thay vì license

Lock-in không phải lúc nào cũng xấu. Nếu vendor đó reliable, pricing reasonable, và switching cost cao - đôi khi stay là quyết định tốt nhất về mặt kinh tế.

Cái tôi muốn tránh là accidental lock-in - không biết mình bị lock-in, không có plan B. Với cả SQL Server và PostgreSQL, tôi luôn đảm bảo team có thể abstract database layer đủ để migrate nếu cần, ngay cả khi không ai plan làm vậy.


Các bạn đang cân nhắc database cho dự án mới? Hay đang migrate từ SQL Server sang PostgreSQL (hoặc ngược lại)? Share context với anh - đây là loại quyết định cần nhiều góc nhìn.

/Son Do - believe in basic

#1percentbetter #solutionarchitecture #postgresql #sqlserver #database


Bài viết liên quan

Xem thêm
Solution Architecture & System Design

Conway's Law - tại sao architecture của bạn trông giống org chart

Conway's Law nói rằng hệ thống bạn build sẽ phản chiếu cấu trúc tổ chức của team. Đây không phải lý thuyết học thuật - đây là lý do tại sao microservices nhiều dự án VN thất bại, và tại sao đôi khi cần thay đổi org chart trước khi thay đổi architecture. Năm 2021, tôi bắt đầu làm tư vấn cho một công ty fintech. Họ muốn chuyển từ monolith sang microservices - xu hướng lúc đó ai cũng nói về. Tôi vào, review codebase, rồi nhìn sang org chart. Và tôi thấy ngay. Monolith của họ có 3 module lớn: Accounting, Lending, và Customer Management. Org chart của họ cũng có 3 team tương ứng: Team Kế toán, Team Tín dụng, và Team Khách hàng. Ba team này không nói chuyện với nhau nhiều - mỗi team có lead riêng, backlog riêng, sprint riêng. Tôi đoán trước microservices của họ sẽ trông như thế nào nếu họ tự migrate: đúng 3 service, tương ứng với 3 team. Không nhiều hơn, không ít hơn. Và đó chính xác là điều xảy ra sau 6 tháng họ tự làm trước khi gọi tôi vào. 3 services, ranh giới business không đúng, coupling vẫn còn đầy, chỉ là coupling giờ đi qua HTTP thay vì function call. Distributed monolith - thứ tệ nhất của cả hai thế giới. Conway's Law đã xảy ra, nhưng không ai để ý.

Solution Architecture & System Design

Read replica vs sharding - chọn sai thì refactor rất đau

Read replica và sharding đều là cách scale database - nhưng giải quyết hai vấn đề hoàn toàn khác nhau. Chọn nhầm thì sau này migrate cực kỳ đau. Đây là cách tôi quyết định, dựa trên kinh nghiệm thực tế.