CodeGym /Các khóa học /SQL SELF /Những lỗi thường gặp khi cài đặt và cấu hình PostgreSQL

Những lỗi thường gặp khi cài đặt và cấu hình PostgreSQL

SQL SELF
Mức độ , Bài học
Có sẵn

1. Các thành phần chính của PostgreSQL

Trình cài đặt sẽ cài cho bạn ba thứ chính: server và hai client. Giờ mình sẽ nói sơ qua về chúng nhé.

Server postgres

Đây là trái tim của PostgreSQL. Server chịu trách nhiệm cho:

  • Xử lý các truy vấn từ client.
  • Quản lý dữ liệu: đọc, ghi, cập nhật.
  • Đảm bảo an toàn và toàn vẹn dữ liệu.

Khi bạn khởi động server PostgreSQL, nó sẽ sẵn sàng nhận truy vấn từ các client.

Client

Client là các chương trình kết nối tới server và gửi truy vấn SQL cho nó. Trong PostgreSQL có vài client phổ biến:

  • Chương trình psql: dòng lệnh để làm việc với PostgreSQL. Rất hợp cho mấy bạn "old school" thích terminal.
  • Chương trình pgAdmin: giao diện đồ họa để quản lý server. Nó như con dao đa năng Thụy Sĩ cho việc làm database — vừa đẹp vừa tiện.
  • Các client khác: thực ra có hàng chục thư viện và công cụ để làm việc với PostgreSQL từ các ngôn ngữ lập trình khác, ví dụ psycopg3 cho Python hoặc pg cho Ruby.

Các thành phần này phối hợp với nhau như nào? Người dùng gửi truy vấn qua client (psql/pgAdmin) → client gửi truy vấn tới server postgres → server xử lý truy vấn, dùng dữ liệu từ hệ thống file và bộ nhớ của nó → kết quả trả về cho client.

2. Kết nối tới database qua terminal

Như mình hy vọng bạn còn nhớ, psql là chương trình để làm việc với PostgreSQL qua dòng lệnh. Nó cực kỳ tiện nếu bạn muốn kiểm tra nhanh cái gì đó, chạy truy vấn hoặc khám phá database.

Ví dụ: dùng psql


# Kết nối tới server
psql -U postgres

Nếu mọi thứ ổn, bạn sẽ thấy màn hình kiểu như này:


psql (17.5)
Type "help" for help.

postgres=#

Chúc mừng, bạn đang ở trong dòng lệnh của psql rồi nhé!

Khi đã kết nối, bạn có thể chạy các lệnh sau:


-- Tạo database mới
CREATE DATABASE test_db;

-- Xem danh sách database
\l

-- Chuyển sang database cụ thể
\c test_db

-- Thoát khỏi phiên làm việc
\q

Đây là công cụ cực đỉnh cho ai thích làm việc "trực tiếp".

3. Những vấn đề phổ biến khi cài đặt

Thế nếu có gì đó không ổn thì sao? Nếu bạn không thấy danh sách database, hoặc thậm chí không đăng nhập được? Trình cài đặt chạy xong là hết 😡 Lỗi, chửi bới trên terminal, postgres không chịu chạy, psql giả vờ không quen bạn. Quen không? Chúc mừng — bạn đang ở giai đoạn kinh điển "mình làm đúng hết mà chẳng cái gì chạy". 😅

Cùng điểm qua những cái bẫy top đầu mà cứ hai bạn mới thì một bạn dính. Và mình sẽ làm điều này với cái đầu lạnh, tách trà nóng và quyết tâm đập tan mọi lỗi trong log. Nên hãy kiên nhẫn nhé — hôm nay mình sẽ dọn dẹp và giúp PostgreSQL hết bệnh "chỉ chạy được trên máy mentor". 🛠️🐘

Vấn đề 1. Xung đột cổng (port)

Đây chắc là trường hợp phổ biến nhất. PostgreSQL mặc định dùng port 5432 để kết nối với server. Nếu port này đã bị ứng dụng khác chiếm, cài đặt vẫn xong nhưng server sẽ không chạy được.

Làm sao nhận biết vấn đề?

Khi khởi động PostgreSQL, server không chịu chạy, hoặc báo lỗi kiểu:


could not bind IPv4 socket: Address already in use

Giải pháp:

Kiểm tra xem ứng dụng nào đang chiếm port 5432. Trên Linux dùng lệnh:


sudo netstat -tuln | grep 5432

Trên Windows, mở terminal và chạy:


netstat -ano | find "5432"

Nếu port đúng là bị chiếm, bạn có thể đổi port cho PostgreSQL. Mở file postgresql.conf (nằm trong thư mục dữ liệu của PostgreSQL) và tìm dòng:


#port = 5432

Đổi port sang số khác, ví dụ:


port = 5433

Nhớ restart lại server sau khi sửa.

Vấn đề 2. Không đủ quyền truy cập

Trên Windows bạn có thể gặp cảnh trình cài đặt PostgreSQL không thể hoàn thành vì user hiện tại không đủ quyền.

Làm sao nhận biết vấn đề?

Trình cài đặt bị treo hoặc báo lỗi thiếu quyền.

Giải pháp:

Hãy chạy trình cài đặt bằng quyền admin. Click chuột phải vào file cài đặt và chọn "Chạy với quyền quản trị viên".

Vấn đề 3. Vấn đề với biến môi trường

Đôi khi sau khi cài PostgreSQL, lệnh psql không nhận trong terminal.

Làm sao nhận biết vấn đề?

Khi thử chạy psql bạn thấy báo lỗi kiểu:


'psql' is not recognized as an internal or external command

Giải pháp:

Lỗi này là do đường dẫn tới thư mục chứa file thực thi của PostgreSQL (ví dụ C:\Program Files\PostgreSQL\17\bin) chưa được thêm vào biến môi trường.

Để sửa trên Windows:

  1. Mở "System Properties" → "Advanced" → "Environment Variables".
  2. Tìm biến Path trong phần "System variables" và chỉnh sửa nó.
  3. Thêm đường dẫn tới thư mục bin của PostgreSQL. Ví dụ:
    
    C:\Program Files\PostgreSQL\17\bin
            
  4. Sau đó restart lại terminal.

4. Lỗi khi kết nối tới server

Đôi khi mọi thứ suôn sẻ: bạn bật PostgreSQL, mở psql và kết nối database ngon lành. Nhưng cũng có lúc không như ý. Bùm, lỗi. Có gì đó chặn lại. Password tưởng đúng, server tưởng chạy... Nhưng psql lại cau có với bạn.

Đừng hoảng — lỗi này ai cũng từng gặp. Dưới đây là những vấn đề kết nối phổ biến nhất và cách xử lý nhanh.

Vấn đề 1. Sai mật khẩu cho user postgres

Khi cài PostgreSQL, bạn đặt mật khẩu cho superuser postgres. Nếu quên hoặc nhập sai mật khẩu, bạn sẽ không kết nối được tới server.

Làm sao nhận biết vấn đề?

Khi nhập lệnh kết nối:


psql -U postgres

Bạn sẽ gặp lỗi kiểu:


password authentication failed for user "postgres"

Giải pháp:

Nếu bạn quên mật khẩu postgres, có thể reset lại như sau:

  1. Mở file pg_hba.conf nằm trong thư mục dữ liệu PostgreSQL C:\Program Files\PostgreSQL\17\data
  2. Đổi dòng:
    
    host    all             all             127.0.0.1/32            md5
            
    Thành:
    
    host    all             all             127.0.0.1/32            trust
            

    Việc này sẽ tạm thời tắt kiểm tra mật khẩu.

  3. Restart lại server PostgreSQL.
  4. Kết nối database không cần mật khẩu:
    
    psql -U postgres
            
  5. Đổi mật khẩu bằng lệnh:
    
    ALTER ROLE postgres PASSWORD 'new_password';
            
  6. Đổi lại file pg_hba.conf về như cũ và restart lại server.

Vấn đề 2. Sai host hoặc port

Nếu client psql không kết nối được tới server, hãy kiểm tra xem bạn đã nhập đúng host và port chưa.

Làm sao nhận biết vấn đề?

Lỗi kết nối có thể như sau:


could not connect to server: Connection refused
    Is the server running on host "127.0.0.1" and accepting
    TCP/IP connections on port 5432?

Giải pháp:

Đảm bảo server PostgreSQL đang chạy:


systemctl status postgresql

(Linux) hoặc mở "Services" trên Windows (Ctrl+Shift+Esc).

Nếu server đã chạy, kiểm tra file pg_hba.conf. Đảm bảo các dòng kết nối cho localhost (127.0.0.1) và IP của bạn đã đúng. Ví dụ:


host    all             all             127.0.0.1/32            md5
host    all             all             192.168.1.100/32        md5

5. Một số mẹo chung để xử lý lỗi

  • Dùng log của PostgreSQL
    Log là bạn thân của bạn. Chúng nằm trong thư mục dữ liệu của PostgreSQL (ví dụ /var/log/postgresql/ trên Linux). Nếu có gì không ổn, hãy bắt đầu bằng việc xem log.
  • Kiểm tra tài liệu
    PostgreSQL có tài liệu thuộc hàng đỉnh nhất luôn. Nếu gặp lỗi, khả năng cao là đã có giải pháp trong tài liệu chính thức: https://www.postgresql.org/docs/.
  • Hỏi cộng đồng
    Nếu bạn bí, hãy lên Stack Overflow, ChatGPT hoặc forum PostgreSQL. Tìm giải pháp sẵn có rất dễ.

P.S.

Lưu ý! Nếu bạn vẫn chưa giải quyết được gì - hãy nhắn cho support của tụi mình: bọn mình sẽ giúp bạn xử lý vấn đề, rồi bổ sung thêm vào bài này luôn.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION