Skip to content
VDS · Cơ sở dữ liệu

PostgreSQL: cài đặt và cơ sở dữ liệu đầu tiên của bạn

Cài đặt PostgreSQL trên VDS, role và cơ sở dữ liệu đầu tiên, cách xác thực hoạt động trong pg_hba.conf, và khắc phục lỗi kết nối.

Cập nhật 23 tháng 8, 2026

PostgreSQL là lựa chọn mặc định cho các ứng dụng viết bằng Python, Node.js và Go. Nó xử lý dữ liệu nghiêm ngặt hơn MySQL và xử lý các truy vấn phức tạp tốt hơn.

Cài đặt

apt update && apt install -y postgresql postgresql-contrib   # Debian, Ubuntu
systemctl enable --now postgresql

Trên AlmaLinux và CentOS Stream, bạn cần tạo cluster thủ công:

dnf install -y postgresql-server postgresql-contrib
postgresql-setup --initdb
systemctl enable --now postgresql

Kiểm tra phiên bản và trạng thái:

sudo -u postgres psql -c "SELECT version();"

Role và cơ sở dữ liệu

Trong PostgreSQL, người dùng được gọi là role. Hãy tạo một role riêng cho mỗi dự án:

sudo -u postgres psql
CREATE ROLE shop WITH LOGIN PASSWORD 'long-random-password';
CREATE DATABASE shop OWNER shop ENCODING 'UTF8';
REVOKE ALL ON DATABASE shop FROM PUBLIC;

Chuỗi kết nối cho ứng dụng:

postgresql://shop:password@127.0.0.1:5432/shop

Kiểm tra từ người dùng hệ thống:

psql "postgresql://shop:password@127.0.0.1:5432/shop" -c "\dt"

Xác thực

Hai tệp quyết định ai có thể đăng nhập và từ đâu.

/etc/postgresql/17/main/postgresql.conf:

listen_addresses = 'localhost'
port = 5432

/etc/postgresql/17/main/pg_hba.conf — các quy tắc được đọc từ trên xuống dưới, và quy tắc khớp đầu tiên sẽ được áp dụng:

local   all   postgres            peer
local   all   all                 scram-sha-256
host    all   all   127.0.0.1/32  scram-sha-256

Phương thức peer nghĩa là “người dùng hệ thống khớp với role” — đó là lý do sudo -u postgres psql hoạt động mà không cần mật khẩu, trong khi lệnh tương tự từ người dùng khác thì không.

Sau khi chỉnh sửa: systemctl reload postgresql. Tuyệt đối không dùng phương thức trust — nó cho phép bất kỳ ai vào mà không cần mật khẩu.

Để truy cập từ bên ngoài, hãy đọc truy cập từ xa: bạn không được mở cổng ra bên ngoài mà không giới hạn theo địa chỉ.

Lỗi thường gặp

Triệu chứngNguyên nhân
role "..." does not existBạn đang kết nối bằng người dùng hệ thống không có role
password authentication failedQuy tắc trong pg_hba.conf yêu cầu phương thức khác, hoặc chưa đặt mật khẩu
could not connect to server: No such file or directoryDịch vụ không chạy, hoặc dùng cổng khác
permission denied for schema publicTừ phiên bản 15 trở lên, bạn phải cấp quyền trên public một cách tường minh: GRANT ALL ON SCHEMA public TO shop;
FATAL: sorry, too many clientsmax_connections đã cạn — hãy thiết lập pool ở phía ứng dụng

Log: /var/log/postgresql/ hoặc journalctl -u postgresql.

Các bước tiếp theo

Đừng cấp cho ứng dụng một role superuser. Một role chủ sở hữu cơ sở dữ liệu thông thường có thể làm mọi thứ cần thiết, nhưng không thể xóa các cơ sở dữ liệu lân cận nếu một lần migration gặp lỗi.