Facebook Pixel

PostgreSQL là gì? Hướng dẫn Cài đặt và Sử dụng PostgreSQL

21 Oct, 2024

Tran Thuy Vy

Frontend Developer
PostgreSQL là gì? Hướng dẫn Cài đặt và Sử dụng PostgreSQL

Mục Lục

Dữ liệu đóng vai trò quan trọng như "mạch máu" của hệ thống và ứng dụng. Việc quản lý và lưu trữ dữ liệu một cách hiệu quả, an toàn và linh hoạt là nhu cầu thiết yếu của các developer. Đó là lý do vì sao việc lựa chọn hệ quản trị cơ sở dữ liệu phù hợp với dự án, doanh nghiệp vô cùng quan trọng.

Hãy cùng mình đi qua bài viết này, hiểu lý do vì sao mà PostgreSQL lại được các doanh nghiệp, developer tin dùng như vậy.

1. PostgreSQL là gì?

PostgreSQL là một hệ quản trị cơ sở dữ liệu quan hệ đối tượng (ORDBMS) mã nguồn mở, được biết đến với tính toàn vẹn cao, khả năng mở rộng và hỗ trợ nhiều chuẩn dữ liệu. PostgreSQL tuân thủ nghiêm ngặt các tiêu chuẩn SQL, hỗ trợ các kiểu dữ liệu nâng cao như JSON, XML, và kiểu dữ liệu địa lý (PostGIS).

postpreSQL là gì

2. Tại sao nên sử dụng PostgreSQL?

Việc lựa chọn một hệ quản trị cơ sở dữ liệu phù hợp là yếu tố quan trọng để đảm bảo hiệu suất và tính ổn định cho ứng dụng của bạn. Dưới đây là những lý do tại sao PostgreSQL là lựa chọn tuyệt vời:

2.1 Hiệu năng cao và ổn định

PostgreSQL được thiết kế với kiến trúc mạnh mẽ, cho phép xử lý các dữ liệu phức tạp cách hiệu quả. Nhờ vào trình tối ưu hóa truy vấn thông minh và hỗ trợ các tính năng như: tối ưu hóa lưu trữ, PostgreSQL có thể:

  • Xử lý tốt khi dữ liệu của bạn tăng lên hàng triệu bản ghi.
  • Hiệu suất cao ngay cả khi thực hiện các phép tính và kết nối nhiều bảng.
  • Hỗ trợ nhiều kết nối đồng thời mà không ảnh hưởng đến hiệu suất.

Ví dụ: Hãy tưởng tượng bạn có một shop với hàng ngàn sản phẩm và hàng triệu lượt truy cập một ngày. PostgreSQL đảm bảo rằng khách hàng có thể tìm kiếm sản phẩm và thực hiện giao dịch một cách nhanh chóng mà không gặp trục trặc.

2.2 Hỗ trợ đa dạng kiểu dữ liệu

PostgreSQL nổi bật với khả năng hỗ trợ nhiều kiểu dữ liệu khác nhau, bao gồm:

  • Kiểu dữ liệu cơ bản: integer, number, string, boolean
  • Structured: Date/Time, Array, Range / Multirange, UUID
  • JSON và JSONB: lưu trữ dữ liệu dạng JSON, cho phép truy vấn và thao tác trực tiếp trên dữ liệu JSON.
  • Geometry: sử dụng với extension PostGIS để lưu trữ và xử lý dữ liệu không gian.

Cho phép bạn lưu trữ và quản lý nhiều loại dữ liệu khác nhau trong cùng một cơ sở dữ liệu, mang lại sự linh hoạt trong xây dựng ứng dụng.

Ví dụ: nếu bạn cần lưu trữ thông tin sản phẩm cùng với các thuộc tính đa dạng như màu sắc, kích thước, đánh giá của khách hàng (dưới dạng JSON), PostgreSQL hoàn toàn có thể đáp ứng.

2.3 Khả năng mở rộng

PostgreSQL cho phép bạn tùy chỉnh và mở rộng hệ thống theo nhu cầu cụ thể:

  • Đáp ứng các yêu cầu đặc thù mà kiểu dữ liệu mặc định không hỗ trợ.
  • Functions and Procedures: viết các hàm bằng nhiều ngôn ngữ như: PL/pgSQL, Python, Perl.
  • Thêm các tính năng mới thông qua các extension như PostGIS, Hstore, Citus.

Bạn dễ dàng thích nghi với các yêu cầu kinh doanh thay đổi và tích hợp các công nghệ mới mà không cần chuyển đổi sang hệ quản trị khác.

Ví dụ: bạn cần thực hiện các phép tính phức tạp trực tiếp trong cơ sở dữ liệu hoặc tích hợp với ngôn ngữ lập trình cụ thể, bạn có thể tạo custom hàm trong PostgreSQL để làm điều đó.

2.4 An toàn dữ liệu

PostgreSQL tuân thủ nghiêm ngặt các nguyên tắc của ACID:

  • Atomicity: transaction được thực hiện toàn bộ hoặc không thực hiện gì, đảm bảo không có dữ liệu bị bỏ dở.
  • Consistency: dữ liệu luôn ở trạng thái hợp lệ trước và sau transaction.
  • Isolation: transaction không bị ảnh hưởng bởi các transaction khác đang diễn ra đồng thời.
  • Durability: sau khi transaction hoàn tất, dữ liệu sẽ được lưu trữ vĩnh viễn.

PostgreSQL luôn đảm bảo rằng dữ liệu của bạn luôn chính xác và an toàn trước các lỗi hệ thống, mất điện hoặc sự cố bất ngờ.

Ví dụ: trong hệ thống ngân hàng, khi khách hàng chuyển tiền, giao dịch phải được thực hiện hoàn toàn (trừ tiền ở tài khoản này và cộng tiền ở tài khoản kia) hoặc không thực hiện gì nếu có lỗi xảy ra.

2.5 Open source, cộng đồng đông đảo

  • Bạn có thể thoải mái trải nghiệm mà không phải tốn chi phí bản quyền.
  • Các version mới được released thường xuyên với tính năng và sửa lỗi.

Ví dụ: nếu bạn gặp phải vấn đề về kỹ thuật, khả năng cao là ai đó trong cộng đồng đã gặp và giải quyết vấn đề tương tự, bạn có thể tìm thấy giải pháp trên các diễn đàn, group thảo luận.

2.6 Tương thích với nhiều loại ngôn ngữ

  • Hỗ trợ nhiều ngôn ngữ lập trình như: Python, Java, C#, Ruby, PHP, Nodejs,...
  • Sử dụng các giao thức ODBC và JDBC, giúp dễ dàng tích hợp với các ứng dụng và công cụ BI.
  • Tương thích với: Docker, Kubernetes, AWS RDS, Google Cloud SQL, Azure Database.

Dễ dàng tích hợp PostgreSQL vào dự án hiện tại của bạn, tiết kiệm thời gian và công sức.

Ví dụ: Bạn có thể triển khai ứng dụng web sử dụng Django (Python) với PostgreSQL làm database cách dễ dàng.

3. So sánh PostgreSQL với MySQL, SQLite

3.1 PostgreSQL với MySQL

PostgreSQL MySQL
Kiểu dữ liệu hỗ trợ
  • Đa dạng: number, string, boolean, array, JSON/JSONB, XML, hstore, geo (PostGIS),...
  • Cơ bản: number, string, boolean, datetime.
  • Hỗ trợ JSON dạng chuỗi, không có JSON gốc như PostgreSQL.
Transaction và ACID
  • Hỗ trợ giao dịch ACID hoàn chỉnh.
  • Multi-Version Concurrency Control (MVCC) giúp quản lý đồng thời hiệu quả.
  • Hỗ trợ giao dịch ACID với InnoDB engine.
  • MyISAM engine không hỗ trợ transaction và khóa ngoại.
Hiệu suất
  • Hiệu suất cao trong xử lý transaction phức tạp và thao tác ghi.
  • Tối ưu cho ứng dụng doanh nghiệp với dữ liệu lớn.
  • Nhanh trong các truy vấn đơn giản và thao tác đọc.
  • Phù hợp cho ứng dụng web với lượng truy cập lớn nhưng dữ liệu không quá phức tạp.
Tuân thủ chuẩn SQL Tuân thủ nghiêm ngặt chuẩn SQL, dễ dàng chuyển đổi và tích hợp. Không hoàn toàn tuân thủ chuẩn SQL.
Khả năng mở rộng
  • Cho phép tạo hàm, kiểu dữ liệu, chỉ mục tùy chỉnh.
  • Hỗ trợ nhiều ngôn ngữ lập trình cho Stored Procedures (PL/pgSQL, Python, Perl,...).
  • Mở rộng qua extensions như PostGIS, Citus.
  • Mở rộng qua plugins, nhưng ít linh hoạt hơn.
  • Stored Procedures chủ yếu sử dụng SQL hoặc ngôn ngữ riêng (PSM).
Bảo mật
  • Quản lý quyền truy cập chi tiết đến cấp cột và hàng.
  • Hỗ trợ nhiều phương thức xác thực (md5, scram-sha-256, GSSAPI,...).
  • Bảo mật cơ bản với quản lý người dùng và quyền trên bảng.
  • Hỗ trợ xác thực qua plugin, nhưng ít tùy chọn hơn.
Sao lưu và phục hồi
  • Hỗ trợ hot backup với pg_dumppg_basebackup.
  • Phục hồi tới thời điểm bất kỳ với Point-in-Time Recovery (PITR).
  • Sao lưu bằng mysqldump hoặc sao chép tệp dữ liệu.
  • Phục hồi cơ bản, không hỗ trợ PITR như PostgreSQL.
Loại ứng dụng phù hợp Hệ thống doanh nghiệp, tài chính, ứng dụng GIS, yêu cầu transaction phức tạp. Ứng dụng web, blog, CMS, E-com vừa và nhỏ.

3.2 PostgreSQL với SQLite

PostgreSQL SQLite
Kiểu dữ liệu hỗ trợ
  • Đa dạng: number, string, boolean, array, JSON/JSONB, XML
  • Hỗ trợ kiểm tra ràng buộc dữ liệu chặt chẽ.
  • Kiểu dữ liệu động (dynamic typing), ít ràng buộc.
  • Hỗ trợ các kiểu cơ bản: NULL, INTEGER, REAL, TEXT, BLOB.
Transaction và ACID Hỗ trợ transaction ACID hoàn chỉnh với MVCC. Hỗ trợ transaction ACID, nhưng khóa cấp độ tệp (file-level locking) có thể giới hạn hiệu suất.
Hiệu suất
  • Hiệu suất cao trong môi trường nhiều người dùng, thao tác đồng thời.
  • Phù hợp cho ứng dụng doanh nghiệp, dữ liệu lớn.
  • Nhanh trong ứng dụng đơn giản.
  • Hiệu suất giảm khi có nhiều thao tác ghi đồng thời.
Khả năng mở rộng Khả năng mở rộng cao, quản lý dữ liệu lớn, hỗ trợ phân mảnh (partitioning). Hạn chế về kích thước tệp cơ sở dữ liệu (tối đa khoảng 281 TB), không phù hợp cho dữ liệu rất lớn.
Bảo mật
  • Quản lý quyền truy cập chi tiết, hỗ trợ xác thực mạnh mẽ.
  • Hỗ trợ mã hóa kết nối và dữ liệu.
  • Bảo mật cơ bản, không có quản lý người dùng và quyền.
  • Cần mã hóa tệp ở mức hệ thống nếu cần bảo mật.
Ứng dụng phù hợp Hệ thống doanh nghiệp, web server, ứng dụng yêu cầu tính năng và hiệu suất cao. Ứng dụng di động, nhúng, phần mềm máy tính để bàn, prototyping.

4. Hướng dẫn cài đặt và PostgreSQL

4.1 Đối với MacOS

  • Sử dụng homebrew
Bash
brew install postgresql
  • Khởi động services PostgreSQL
Bash
brew services start postgresql
  • Kiểm tra phiên bản
Bash
psql --version

4.2 Cài với câu lệnh Docker

  • Kéo PostgreSQL images về:
Bash
docker pull postgres
  • Chạy container PostgreSQL
Bash
docker run --name my-postgres -e POSTGRES_PASSWORD=mysecretpassword -p 5432:5432 -d postgres
  • –name my-postgres: đặt tên cho container.
  • -e POSTGRES_PASSWORD=mysecretpassword: thiết lập mật khẩu cho tài khoản postgres.
  • -p 5432:5432: mở port 5432 để truy cập từ bên ngoài.
  • -d postgres: chạy container ở nền.

5. Hướng dẫn sử dụng PostgreSQL

5.1 Kết nối tới PostgreSQL

5.1.1 Sử dụng psql (dòng lệnh)

  • Kết nối với tài khoản postgres:
Bash
sudo -u postgres psql
  • Kết nối với cơ sở dữ liệu:
Bash
psql -U myuser -d mydatabase

5.1.2 Sử dụng pgAdmin 4 (giao diện)

  • Mở pgAdmin 4 từ menu.
  • Kết nối tới server bằng tài khoản postgres và mật khẩu.
  • Quản lý cơ sở dữ liệu, bảng, và thực thi các lệnh SQL thông qua giao diện.

5.2 Các câu lệnh SQL cơ bản

  1. Tạo bảng
Sql
CREATE TABLE employees (
  id SERIAL PRIMARY KEY,
  name VARCHAR(100) NOT NULL,
  position VARCHAR(100),
  salary NUMERIC,
  department_id INTEGER REFERENCES departments(id)
);
  • SERIAL: kiểu dữ liệu tự động tăng.
  • PRIMARY KEY: định nghĩa khóa chính.
  • REFERENCES: thiết lập khóa ngoại, tạo mối quan hệ giữa các bảng.

2. Thêm dữ liệu vào bảng

Sql
INSERT INTO departments (name) VALUES ('Sales'), ('Marketing'), ('IT');

INSERT INTO employees (name, position, salary, department_id)
VALUES
  ('Viet', 'Manager', 7000, 1),
  ('Nghia', 'Developer', 5000, 3),
  ('Yen', 'Designer', 4500, 2);

3. Truy vấn dữ liệu với JOIN

Sql
SELECT e.name, e.position, d.name AS department
FROM employees e
JOIN departments d ON e.department_id = d.id;

4. Cập nhật dữ liệu

Sql
UPDATE employees SET salary = salary * 1.1 WHERE department_id = 1;

5. Xoá dữ liệu

Sql
DELETE FROM employees WHERE name = 'Yen';

5.3 Tối ưu hoá và bảo mật trong PostgreSQL

  • Kiểm tra thực thi và hiệu suất của truy vấn.
Sql
EXPLAIN ANALYZE SELECT * FROM employees WHERE salary > 5000;
  • Tạo chỉ mục INDEX để tăng tốc độ truy vấn
Sql
CREATE INDEX idx_employees_salary ON employees(salary);
  • Chỉ mục INDEX giúp tăng tốc độ truy vấn bằng cách giảm thiểu số lượng bản ghi cần đọc.
  • EXPLAIN ANALYZE cung cấp thông tin chi tiết về cách PostgreSQL thực thi truy vấn.

5.4 Sao lưu và phục hồi dữ liệu

  • Sao lưu dữ liệu
Bash
pg_dump -U myuser -F c -b -v -f mydatabase.backup mydatabase

-F c: định dạng nén.
-b: bao gồm các đối tượng lớn (blob).
-v: chế độ chi tiết.
-f: tệp đầu ra.

  • Khôi phục dữ liệu pg_restore
Bash
createdb -U myuser newdatabase
pg_restore -U myuser -d newdatabase -v mydatabase.backup

6. Kết luận

PostgreSQL là hệ quản trị cơ sở dữ liệu mạnh mẽ, linh hoạt và đáng tin cậy, phù hợp cho nhiều loại ứng dụng từ nhỏ đến lớn. Với khả năng hỗ trợ nhiều tính năng nâng cao, PostgreSQL là lựa chọn lý tưởng cho các dự án yêu cầu hiệu suất cao và tính toàn vẹn dữ liệu.

Qua bài viết này, hy vọng bạn đã có hành trang bắt đầu hành trình khám phá PostgreSQL và tận dụng sức mạnh của nó để xây dựng các ứng dụng của riêng bạn.

Các bài viết liên quan:

Bài viết liên quan

Lập trình backend expressjs

xây dựng hệ thống microservices
  • Kiến trúc Hexagonal và ứng dụngal font-
  • TypeScript: OOP và nguyên lý SOLIDal font-
  • Event-Driven Architecture, Queue & PubSubal font-
  • Basic scalable System Designal font-

Đăng ký nhận thông báo

Đừng bỏ lỡ những bài viết thú vị từ 200Lab