PostgreSQL, thường được gọi tắt là Postgres, là một hệ quản trị cơ sở dữ liệu đối tượng-quan hệ (ORDBMS) mã nguồn mở tiên tiến, nổi tiếng với độ tin cậy vượt trội, tính linh hoạt cao và khả năng tuân thủ nghiêm ngặt các tiêu chuẩn SQL. Được phát triển từ Đại học Berkeley, PostgreSQL đã duy trì cam kết mã nguồn mở từ những ngày đầu, cho phép cộng đồng xem, sửa đổi và phân phối mã nguồn một cách tự do.
Với những ưu điểm vượt trội như miễn phí, mã nguồn mở và cộng đồng lớn mạnh, PostgreSQL trở thành lựa chọn hàng đầu cho nhiều ứng dụng quan trọng, từ xử lý giao dịch phức tạp, phân tích dữ liệu chuyên sâu, đến hỗ trợ ứng dụng di động và web, hệ thống thông tin địa lý (GIS), hiện đại hóa cơ sở dữ liệu và thậm chí cả các ứng dụng Trí tuệ Nhân tạo tạo sinh (Generative AI).
Bài viết này sẽ hướng dẫn bạn từng bước cách cài đặt phiên bản PostgreSQL 18 mới nhất trên hệ điều hành Ubuntu 24.04 (Noble Numbat) của mình, đảm bảo bạn có một môi trường cơ sở dữ liệu mạnh mẽ và sẵn sàng cho mọi dự án.
Mục lục
Yêu Cầu Tiên Quyết
Trước khi bắt đầu quá trình cài đặt, bạn cần đảm bảo hệ thống của mình đáp ứng các điều kiện sau:
- Một hệ thống Ubuntu 24.04 đã được cài đặt, có thể là máy cục bộ hoặc máy chủ ảo.
- Một người dùng không phải root với quyền
sudo. Điều này giúp đảm bảo an toàn cho hệ thống của bạn. - Có kiến thức cơ bản về việc sử dụng terminal (giao diện dòng lệnh) của Linux.
Bước 1: Cài Đặt PostgreSQL
Phần này sẽ hướng dẫn bạn cách cài đặt PostgreSQL 18 bằng cách sử dụng kho lưu trữ PGDG (PostgreSQL Global Development Group), đảm bảo bạn nhận được phiên bản ổn định và mới nhất.
1. Cập Nhật Chỉ Mục Gói
Các kho lưu trữ mặc định của Ubuntu thường đi kèm với các gói PostgreSQL, nhưng để đảm bảo bạn có danh sách gói mới nhất và an toàn, hãy cập nhật hệ thống trước.
Nếu bạn chưa cập nhật các gói của hệ thống gần đây, hãy chạy các lệnh sau:
sudo apt update
sudo apt upgrade
Lệnh sudo apt update sẽ làm mới danh sách các gói có sẵn từ tất cả các kho lưu trữ đã cấu hình, trong khi sudo apt upgrade sẽ nâng cấp tất cả các gói đã cài đặt lên phiên bản mới nhất.
2. Thêm Kho Lưu Trữ PGDG
Để cài đặt phiên bản PostgreSQL mới nhất (phiên bản 18 trong trường hợp này) hoặc các phiên bản cũ hơn vẫn còn được hỗ trợ, bạn cần thêm kho lưu trữ của Nhóm Phát triển Toàn cầu PostgreSQL (PGDG). Điều này cho phép APT biết nơi tìm các gói PostgreSQL cụ thể.
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
Giải thích lệnh trên:
$(lsb_release -cs): Lệnh này sẽ tự động chèn tên mã của phiên bản Ubuntu hiện tại của bạn (ví dụ: “noble” cho Ubuntu 24.04).pgdg: Chỉ ra rằng bạn muốn sử dụng kho lưu trữ PostgreSQL cho phiên bản phát hành đó.
3. Nhập Khóa Ký Kho Lưu Trữ
Sau khi thêm kho lưu trữ mới, bạn cần nhập khóa ký GPG của nó. Điều này giúp hệ thống APT xác minh tính toàn vẹn và đáng tin cậy của các gói được tải xuống từ kho lưu trữ PGDG.
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg
Giải thích lệnh trên:
curl -fsSL https://.../ACCC4CF8.asc: Tải xuống khóa ký của kho lưu trữ PostgreSQL (một khóa GPG). Các tùy chọn-f(fail silently),-s(silent),-S(show error) và-L(follow redirects) đảm bảo quá trình tải xuống diễn ra mượt mà.gpg --dearmor: Chuyển đổi khóa từ định dạng ASCII-armored sang định dạng nhị phân mà APT có thể sử dụng.-o /etc/apt/trusted.gpg.d/postgresql.gpg: Lưu khóa đã chuyển đổi vào thư mục nơi APT tìm kiếm các khóa đáng tin cậy.
4. Cập Nhật Chỉ Mục Gói Lại
Sau khi thêm kho lưu trữ PostgreSQL (PGDG repo) và khóa GPG, bạn cần cập nhật chỉ mục gói của APT một lần nữa. Điều này là cần thiết để APT nhận biết các nguồn phần mềm mới mà bạn vừa thêm và các gói PostgreSQL có sẵn từ chúng.
sudo apt update
5. Cài Đặt PostgreSQL Phiên Bản 18
Giờ đây, bạn đã sẵn sàng để cài đặt PostgreSQL phiên bản 18. Lệnh dưới đây sẽ cài đặt cụ thể phiên bản 18 và các thành phần phụ thuộc của nó.
sudo apt -y install postgresql-18
Tùy chọn -y sẽ tự động chấp nhận tất cả các lời nhắc cài đặt mà không yêu cầu xác nhận thủ công.
Bước 2: Khởi Động, Kích Hoạt và Kiểm Tra Trạng Thái
Sau khi cài đặt xong, bạn cần đảm bảo dịch vụ PostgreSQL đang chạy và được cấu hình để tự động khởi động cùng hệ thống.
1. Khởi Động Dịch Vụ
Sử dụng lệnh sau để khởi động dịch vụ PostgreSQL:
sudo systemctl start postgresql
2. Kích Hoạt Dịch Vụ
Để PostgreSQL tự động khởi động mỗi khi hệ thống của bạn boot, hãy kích hoạt dịch vụ:
sudo systemctl enable postgresql
3. Kiểm Tra Trạng Thái
Để xác minh rằng dịch vụ PostgreSQL đang hoạt động bình thường, kiểm tra trạng thái của nó:
sudo systemctl status postgresql
Nếu dịch vụ đang hoạt động, đầu ra sẽ hiển thị active (running), cho biết PostgreSQL đã được cài đặt và chạy thành công.
Bước 3: Bảo Mật Cơ Sở Dữ Liệu PostgreSQL (Trên Máy Cục Bộ)
Việc bảo mật cơ sở dữ liệu là cực kỳ quan trọng. Bước này sẽ hướng dẫn bạn cách thiết lập mật khẩu mạnh và tạo người dùng mới cho các tác vụ hàng ngày.
1. Đăng Nhập Với Người Dùng PostgreSQL
Mặc định, sau khi cài đặt, PostgreSQL tạo một người dùng Linux có tên postgres. Để quản lý cơ sở dữ liệu, bạn cần chuyển sang người dùng này hoặc thực hiện các lệnh với quyền của người dùng này.
sudo -u postgres psql
Lệnh này sẽ đưa bạn vào giao diện dòng lệnh của PostgreSQL (psql) với tư cách là người dùng postgres.
2. Thay Đổi Mật Khẩu Người Dùng Postgres Mặc Định
Người dùng postgres là người dùng quản trị cao nhất. Bạn nên thay đổi mật khẩu mặc định của nó bằng một mật khẩu mạnh để tăng cường bảo mật.
ALTER USER postgres WITH ENCRYPTED PASSWORD 'mat_khau_manh_cua_ban';
Hãy thay thế 'mat_khau_manh_cua_ban' bằng một mật khẩu thực sự mạnh và duy nhất.
3. Tạo Người Dùng Mới
Bạn không nên sử dụng người dùng postgres mặc định cho các tác vụ hàng ngày. Thay vào đó, hãy tạo một người dùng mới (ví dụ: db_manager) với mật khẩu riêng và các quyền hạn phù hợp.
CREATE USER db_manager ENCRYPTED PASSWORD 'mat_khau_manh_moi';
4. Thoát Khỏi Bảng Điều Khiển PostgreSQL
Sau khi thực hiện các thay đổi, bạn có thể thoát khỏi giao diện psql bằng lệnh:
\q
5. Chỉnh Sửa Tệp Cấu Hình để Bật Xác Thực Mật Khẩu
Mặc định, PostgreSQL có thể sử dụng xác thực “peer” cho các kết nối cục bộ, nghĩa là nếu người dùng Linux trùng tên với người dùng PostgreSQL, họ có thể đăng nhập mà không cần mật khẩu. Để tăng cường bảo mật và yêu cầu xác thực mật khẩu cho các kết nối cục bộ, bạn cần chỉnh sửa tệp cấu hình pg_hba.conf.
sudo sed -i '/^local/s/peer/scram-sha-256/' /etc/postgresql/18/main/pg_hba.conf
Lệnh sed này sẽ tìm dòng bắt đầu bằng “local” và thay thế phương thức xác thực “peer” bằng “scram-sha-256”, một phương thức xác thực mật khẩu an toàn hơn. Lưu ý rằng đường dẫn tệp cấu hình có thể thay đổi tùy theo phiên bản PostgreSQL, ở đây là /etc/postgresql/18/main/pg_hba.conf.
6. Khởi Động Lại PostgreSQL để Áp Dụng Thay Đổi
Để các thay đổi trong tệp cấu hình có hiệu lực, bạn cần khởi động lại dịch vụ PostgreSQL.
sudo systemctl restart postgresql
Bước 4: Tạo Role Mới
Trong PostgreSQL, “role” là một khái niệm tổng quát bao gồm cả người dùng và nhóm. Việc tạo role giúp quản lý quyền truy cập hiệu quả hơn.
1. Chuyển Sang Tài Khoản `postgres`
Để tạo role mới, bạn cần quyền của người dùng quản trị postgres:
sudo -u postgres psql
2. Tạo Role Mới
Bạn có thể tạo role theo nhiều cách:
Sử dụng `createuser` (tương tác)
Công cụ createuser là một cách dễ dàng để tạo role mới bằng cách trả lời các câu hỏi tương tác.
Nếu bạn đã đăng nhập vào tài khoản postgres (như trong bước trước):
createuser --interactive
Hoặc nếu bạn muốn tạo role trực tiếp từ terminal mà không cần chuyển sang tài khoản postgres trước:
sudo -u postgres createuser --interactive
Lệnh này sẽ hỏi bạn tên role, xem role đó có phải là superuser không, có thể tạo cơ sở dữ liệu không, v.v.
Với đăng nhập + mật khẩu
Để tạo một người dùng cơ bản có khả năng đăng nhập, bạn có thể chạy:
createuser ten_nguoi_dung_moi --interactive --pwprompt
Lệnh này sẽ tương tác hỏi bạn tên role, mật khẩu và các đặc quyền để cấp.
Sử dụng SQL (`CREATE ROLE`)
Bạn cũng có thể tạo role bằng lệnh SQL trực tiếp trong giao diện psql.
Một role không có thuộc tính LOGIN không thể được sử dụng để đăng nhập. Chúng thường được sử dụng làm “role nhóm” để gộp một tập hợp các quyền lại với nhau, sau đó có thể được cấp cho nhiều role người dùng, đơn giản hóa việc quản lý quyền.
CREATE ROLE ten_nguoi_dung_moi WITH LOGIN PASSWORD 'mat_khau_an_toan';
Lưu ý: CREATE USER thực chất là một bí danh cho CREATE ROLE ... WITH LOGIN.
3. Cấp Quyền (Tùy Chọn)
Bạn có thể cấp các đặc quyền cụ thể cho một role trong quá trình tạo hoặc sau đó bằng lệnh ALTER ROLE.
Để cấp quyền, bạn phải là một superuser (ví dụ: tài khoản postgres).
Quyền Superuser
Sử dụng lệnh dưới đây để bỏ qua tất cả các kiểm tra quyền cho một người dùng:
ALTER ROLE ten_nguoi_dung_moi WITH SUPERUSER;
Quyền Tạo Cơ Sở Dữ Liệu
Để cho phép role tạo cơ sở dữ liệu mới:
ALTER ROLE ten_nguoi_dung_moi WITH CREATEDB;
Nhiều Quyền Cùng Lúc
Bạn có thể gán các thuộc tính này trực tiếp khi tạo role:
CREATE ROLE ten_nguoi_dung_moi WITH LOGIN PASSWORD 'mat_khau_an_toan' SUPERUSER CREATEDB;
Bước 5: Tạo Cơ Sở Dữ Liệu Mới
Chỉ superuser hoặc một role có đặc quyền CREATEDB mới có thể tạo cơ sở dữ liệu và gán quyền sở hữu cho một role khác cùng một lúc.
1. Chuyển Sang Tài Khoản `postgres`
Nếu bạn chưa đăng nhập với tài khoản postgres hoặc superuser, hãy làm như sau:
sudo -u postgres psql
2. Tạo Cơ Sở Dữ Liệu Mới
Bạn có thể tạo cơ sở dữ liệu bằng lệnh shell hoặc SQL.
Sử dụng `createdb` (Lệnh Shell)
Lệnh createdb là một công cụ tiện ích để tạo cơ sở dữ liệu. Sử dụng cờ -O (chữ O in hoa) để chỉ định chủ sở hữu mới. Lệnh này nên được chạy từ dòng lệnh của máy chủ của bạn, không phải bên trong shell psql.
createdb -O ten_role_moi ten_co_so_du_lieu_moi
Sử dụng SQL (bên trong psql)
Từ giao diện psql, bạn có thể sử dụng lệnh CREATE DATABASE với mệnh đề OWNER.
CREATE DATABASE ten_co_so_du_lieu_moi OWNER ten_role_moi;
Theo mặc định, nếu bạn không chỉ định chủ sở hữu, role thực thi lệnh sẽ trở thành chủ sở hữu của cơ sở dữ liệu mới. Nếu bạn cần thay đổi chủ sở hữu sau khi tạo, bạn có thể sử dụng lệnh ALTER DATABASE.
Bước 6: Chỉnh Sửa Cơ Sở Dữ Liệu
Tương tự như lệnh CREATE DATABASE, chỉ superuser mới có thể chỉnh sửa cơ sở dữ liệu. Bạn vẫn cần ở trong tài khoản superuser mà bạn vừa sử dụng.
1. Thay Đổi Tên Cơ Sở Dữ Liệu
ALTER DATABASE ten_cu RENAME TO ten_moi;
2. Thay Đổi Chủ Sở Hữu
Thay đổi chủ sở hữu, tức là role sở hữu cơ sở dữ liệu:
ALTER DATABASE ten_csdl OWNER TO { nguoi_chu_moi | CURRENT_ROLE | CURRENT_USER | SESSION_USER };
Ví dụ:
ALTER DATABASE mydb OWNER TO new_owner;
ALTER DATABASE mydb OWNER TO CURRENT_USER;
3. Di Chuyển Tệp Cơ Sở Dữ Liệu đến Lưu Trữ Khác
ALTER DATABASE ten_csdl SET TABLESPACE tablespace_moi;
Ví dụ:
ALTER DATABASE mydb SET TABLESPACE fast_ssd;
4. Làm Mới Siêu Dữ Liệu Collation
Làm mới siêu dữ liệu collation được sử dụng bởi cơ sở dữ liệu để phù hợp với phiên bản locale/collation libc của hệ thống.
ALTER DATABASE ten_csdl REFRESH COLLATION VERSION;
Ví dụ:
ALTER DATABASE mydb REFRESH COLLATION VERSION;
Bước 7: Truy Cập Dấu Nhắc Postgres Với Role Mới
Để kết nối với cơ sở dữ liệu với một role mới, bạn cần đảm bảo có một người dùng Linux tương ứng nếu bạn muốn sử dụng xác thực `peer` (mặc định cho kết nối cục bộ nếu không cấu hình scram-sha-256 cho `local`). Hoặc đơn giản là kết nối với tư cách người dùng Linux có quyền sudo.
1. Tạo Người Dùng Linux Tương Ứng
Để người dùng PostgreSQL có thể đăng nhập bằng tài khoản Linux của họ (nếu cấu hình pg_hba.conf cho phép peer hoặc nếu bạn dùng `sudo -u`), bạn có thể tạo một người dùng Linux có cùng tên:
sudo adduser johndoe
2. Chuyển Đổi và Kết Nối
Sau khi tạo người dùng Linux, bạn có thể chuyển đổi sang tài khoản đó và kết nối với PostgreSQL:
sudo -i -u johndoe
psql
Hoặc, bạn có thể kết nối trực tiếp với người dùng PostgreSQL bằng cách sử dụng sudo -u từ tài khoản hiện tại của mình:
sudo -u sammy psql
3. Kiểm Tra Thông Tin Kết Nối
Khi đã ở trong giao diện psql, bạn có thể kiểm tra thông tin kết nối hiện tại:
\conninfo
Lệnh này sẽ hiển thị thông tin chi tiết về kết nối của bạn, bao gồm tên người dùng, cơ sở dữ liệu và cổng.
Bước 8: Tạo và Xóa Bảng
Sau khi cơ sở dữ liệu của bạn đã sẵn sàng, bạn có thể bắt đầu tạo và quản lý các bảng.
1. Cú Pháp Cơ Bản để Tạo Bảng
CREATE TABLE ten_bang (
ten_cot1 kieu_du_lieu (do_dai) rang_buoc_cot,
ten_cot2 kieu_du_lieu (do_dai),
ten_cot3 kieu_du_lieu (do_dai)
);
2. Bảng Mẫu
Hãy tạo một bảng mẫu có tên animals:
CREATE TABLE dong_vat (
id serial PRIMARY KEY,
ma_dinh_danh VARCHAR(20) UNIQUE NOT NULL,
loai_vat VARCHAR(50) NOT NULL,
gioi_tinh VARCHAR(10)
);
3. Chèn Dữ Liệu Mẫu
Chèn một số dữ liệu vào bảng dong_vat:
INSERT INTO dong_vat (id, ma_dinh_danh, loai_vat, gioi_tinh)
VALUES
('1', '401', 'Chim', 'm'),
('2', '403', 'Gia Suc', 'm'),
('3', '404', 'Ca', 'f');
4. Truy Vấn Bảng
Để xem tất cả dữ liệu trong bảng dong_vat:
SELECT * FROM dong_vat;
5. Xóa Bảng
Để xóa một bảng (bao gồm tất cả dữ liệu bên trong), sử dụng lệnh DROP TABLE. Tùy chọn IF EXISTS sẽ ngăn lỗi nếu bảng không tồn tại.
DROP TABLE IF EXISTS dong_vat;
6. Sửa Đổi Bảng
Để thay đổi cấu trúc của bảng đã tồn tại (ví dụ: thêm/xóa cột, thay đổi kiểu dữ liệu), sử dụng lệnh ALTER TABLE:
ALTER TABLE ten_bang TUY_CHON_ALTER tuy_chon_phu;
7. Thoát
Để thoát khỏi giao diện psql:
\q
Kết Luận
Chúc mừng! Bạn đã thành công cài đặt PostgreSQL 18 trên hệ điều hành Ubuntu 24.04 của mình. Hướng dẫn này đã đưa bạn qua tất cả các bước cần thiết, từ việc chuẩn bị hệ thống, cài đặt cơ sở dữ liệu, thiết lập bảo mật cơ bản, đến quản lý người dùng và cơ sở dữ liệu ban đầu.
PostgreSQL là một hệ quản trị cơ sở dữ liệu cực kỳ mạnh mẽ và linh hoạt. Có rất nhiều điều thú vị để khám phá thêm, bao gồm nhưng không giới hạn ở: truy vấn dữ liệu nâng cao, thêm và xóa cột từ bảng, cập nhật dữ liệu trong bảng, tạo chỉ mục, quản lý sao lưu và phục hồi, cũng như tối ưu hóa hiệu suất. Hãy tiếp tục học hỏi và khám phá sức mạnh của Postgres để phát triển các ứng dụng của bạn!



