Ừm ...
Nếu bạn có thể kết nối với tên người dùng và mật khẩu trong pgAdminIII nhưng bạn không thể kết nối với psql
thì hai chương trình đó có thể đang kết nối với cơ sở dữ liệu khác nhau.
[Nếu bạn đang kết nối với các cơ sở dữ liệu khác nhau, trước tiên hãy thử kết nối với cùng một cơ sở dữ liệu. Xem bên dưới.]
Từ PostgreSQL: Tài liệu: 9.3: psql :
Nếu bạn bỏ qua tên máy chủ, psql sẽ kết nối qua ổ cắm tên miền Unix đến máy chủ trên máy chủ cục bộ hoặc qua TCP / IP đến localhost trên các máy không có ổ cắm tên miền Unix.
Nếu bạn không chạy một cái gì đó như psql ... -h host_name ...
và bạn đang chạy Ubuntu, psql
thì nên kết nối qua ổ cắm tên miền Unix, vì vậy PostgreQuery có thể không được cấu hình để cho phép một trong các phương thức xác thực mật khẩu cho người dùng postgres .
Bạn có thể kiểm tra điều này bằng cách chạy:
sudo -u postgres psql
Nếu các công trình trên, máy chủ của bạn có lẽ là cấu hình để sử dụng ngang hàng xác thực cho các kết nối địa phương bằng các postgres người dùng, tức là yêu cầu hệ điều hành cho tên người dùng của bạn để xác nhận rằng bạn đang postgres .
Vì vậy, đó có thể là tệp pg_hba.conf của bạn
Đường dẫn đầy đủ của tệp sẽ giống như /etc/postgresql/9.3/main/pg_hba.conf . Bạn có thể xem nó bằng, ví dụ sudo cat /etc/postgresql/9.3/main/pg_hba.conf | more
.
Nếu bạn đang bỏ qua tên máy chủ trong psql
lệnh của mình , bạn sẽ có thể kết nối nếu bạn thêm mục nhập sau vào tệp pg_hba.conf của mình :
# Connection type Database User IP addresses Method
local all postgres md5
[Dòng nhận xét trong tệp pg_hba.conf bắt đầu bằng #
.]
Nếu bạn đang bao gồm tên máy chủ trong psql
lệnh của mình , hãy thêm mục này thay thế:
# Connection type Database User IP addresses Method
host all postgres 127.0.0.1/32 md5
Bạn cần đặt mục nhập trước khi bất kỳ mục nào khác được khớp với kết nối của bạn thông qua psql
. Nếu nghi ngờ về nơi để đặt nó, chỉ cần đặt nó trước dòng không bình luận đầu tiên.
Tìm hiểu thêm về pg_hba.conf
Từ PostgreSQL: Tài liệu: 9.3: Tệp pg_hba.conf [phần nhấn mạnh của tôi]:
Bản ghi đầu tiên với loại kết nối phù hợp , địa chỉ khách hàng , cơ sở dữ liệu được yêu cầu và tên người dùng được sử dụng để thực hiện xác thực. Không có "dự phòng" hoặc "sao lưu": nếu một bản ghi được chọn và xác thực thất bại, các bản ghi tiếp theo sẽ không được xem xét. Nếu không có hồ sơ phù hợp, truy cập bị từ chối.
Lưu ý rằng hồ sơ không phù hợp với phương pháp xác thực. Vì vậy, nếu tệp pg_hba.conf của bạn chứa mục sau:
# Connection type Database User IP addresses Method
local all postgres peer
Sau đó, bạn sẽ không thể kết nối qua:
psql -u postgres
Trừ khi một trong những mục này nằm trong tệp pg_hba.conf của bạn phía trên mục nhập cũ:
# Connection type Database User IP addresses Method
local all postgres md5
local all postgres password # Unencrypted!
local all all md5
local all all password # Unencrypted!