PostgreSQL tự quảng bá mình là nền tảng ứng dụng cơ sở dữ liệu nguồn mở tiên tiến nhất và Debian Linux chắc chắn có rất nhiều gói khiến nó thậm chí còn phức tạp hơn. Bạn cũng có thể tìm thấy rất nhiều gói dành cho PostgreSQL nếu bạn đang làm việc với Ubuntu Server hoặc bất kỳ phiên bản Ubuntu nào khác vì chúng dựa trên lõi của Debian. Mức độ phức tạp và phát triển này khiến cho các cảnh báo “không thể kết nối với máy chủ” và “không có tệp hoặc thư mục như vậy” trở nên khó chịu hơn nhiều.
May mắn thay, đây thường là những trường hợp đơn giản về vấn đề cấp phép do PostgreSQL muốn người dùng có tên postgres giữ các thư mục này. Bằng cách sử dụng thủ thuật dòng lệnh đơn giản, bạn có thể khắc phục điều này gần như ngay lập tức. Tuy nhiên, bạn sẽ muốn thực hiện trước một số bước kiểm tra chẩn đoán cơ bản chỉ để đảm bảo rằng đây thực sự là vấn đề mà bạn đang gặp phải.
Sửa lỗi PostgreSQL không thể kết nối với máy chủ
Trước tiên, hãy thử khởi động lại hệ thống PostgreSQL theo cách thủ công. Đôi khi điều này là đủ để khắc phục mọi thứ và nếu không thì ít nhất bạn sẽ nhận được thông báo lỗi để khắc phục. Nhiều khả năng, bạn chỉ cần khởi động lại hệ thống bằng cách đưa ra lệnh psql với tư cách là người dùng postgres.
Bạn có thể thấy rằng điều này đã xóa mọi thứ. Nếu không, bạn có thể nhận được một dòng có nội dung “psql:không thể kết nối với máy chủ:Không có tệp hoặc thư mục như vậy”, điều đó có nghĩa là bạn đang gặp vấn đề về quyền. Nếu bạn nhận được thông báo lỗi này thì bạn cũng sẽ nhận được một số văn bản khác.
Kiểm tra trạng thái dịch vụ nếu bạn nhận được thông báo này để đảm bảo rằng các mô-đun đã được tải. Đáng lẽ phải như vậy, nhưng nếu không, bạn có thể muốn khởi động lại. Nếu bạn nhận được thông báo có nội dung “Đã tải:đã tải (/lib/systemd/system/postgresql.service; đã bật)”, thì chúng đang chạy. Hãy thử khởi động lại dịch vụ sudo postgresql chỉ để khởi động lại một thời gian ngắn và xem liệu điều đó có khắc phục được điều gì không. Thường thì không, nhưng có thể đáng để thử tùy theo.
Giả sử rằng nó không giúp ích được gì, hãy xem bên trong nhật ký PostgreSQL để tìm lỗi. Trong trường hợp không chắc bạn tìm thấy điều gì đó về lỗi gói thì có thể bạn đang thiếu một trong các mô-đun SQL. Đây thường không phải là nguyên nhân gây ra những vấn đề này, nhưng ít nhất hãy xem xét cũng không hại gì. Nhiều khả năng là bạn sẽ thực sự gặp điều gì đó cảnh báo bạn rằng “Quyền phải là u=rwx (0700)” và
rằng “thư mục dữ liệu “/var/lib/postgresql/9.6/main” có quyền truy cập nhóm hoặc thế giới”, mặc dù bạn có thể thấy số phiên bản khác nhau tùy thuộc vào máy chủ SQL nào bạn đang chạy.
Điều này là do Debian và các bản phân phối tương tự mong đợi rằng người dùng và nhóm postgres kiểm soát các thư mục này với quyền 0700 và tất cả các tệp thông qua quyền 0600 vì mục đích bảo mật. Tất cả những gì bạn phải làm là chạy lệnh sau tại terminal để sửa quyền:
sudo chown -R postgres:postgres /var/lib/postgresql/9.6/ &&sudo chmod -R u=rwX,go=/var/lib/postgresql/9.6/
Hãy nhớ rằng đó phải là chữ X viết hoa chứ không phải chữ x thường phổ biến hơn mà bạn có thể quen thuộc hơn do cách cụ thể mà bạn muốn đặt các tùy chọn cấp phép tệp này. Mặc dù bạn cần quyền truy cập root để thực hiện việc này, nhưng việc bao gồm hai dấu sudo đó là quá đủ để cung cấp cho bạn các quyền thích hợp khi chạy với tư cách người dùng thông thường. Điều này rất quan trọng vì Ubuntu và các triển khai Linux khác nhau tách ra từ Ubuntu sẽ băm nhỏ tài khoản gốc chính nên bạn cần thực hiện mọi việc theo cách này.
Khi lệnh này kết thúc, bạn có thể khởi động lại dịch vụ bằng cách sudo service postgresql restart từ thiết bị đầu cuối và lần này bạn sẽ không gặp bất kỳ lỗi nào. Nếu bạn xem nhật ký thì những cảnh báo liên quan đến vấn đề về quyền sẽ không còn tồn tại nữa.
Đây là lỗi xảy ra do các điều kiện khá cụ thể, vì vậy bạn không nên gặp lại lỗi này sau khi sửa lỗi lần đầu tiên với điều kiện là bạn không cố gắng thực hiện thủ công bất kỳ điều gì liên quan đến thao tác quyền của thư mục PostgreSQL. Dù sao thì cũng không có trường hợp nào mà việc này thực sự cần thiết, ngoài việc khắc phục vấn đề này ngay từ đầu.
GIỚI THIỆU TÁC GIẢ
Mũi tên Kevin
Kevin Arrows là một chuyên gia công nghệ giàu kinh nghiệm và hiểu biết với hơn một thập kỷ kinh nghiệm trong ngành. Anh có chứng chỉ Chuyên gia Công nghệ được Chứng nhận của Microsoft (MCTS) và có niềm đam mê sâu sắc trong việc cập nhật những phát triển công nghệ mới nhất. Kevin đã viết nhiều về nhiều chủ đề liên quan đến công nghệ, thể hiện chuyên môn và kiến thức của mình trong các lĩnh vực như phát triển phần mềm, an ninh mạng và điện toán đám mây. Những đóng góp của ông cho lĩnh vực công nghệ đã được các đồng nghiệp công nhận và tôn trọng rộng rãi, đồng thời ông được đánh giá cao nhờ khả năng giải thích các khái niệm kỹ thuật phức tạp một cách rõ ràng và ngắn gọn.