更改了pgAdmin中postgres登錄的密碼,現在無法連接到伺服器
我試圖使用 pg_dump 編寫數據庫腳本,並在此過程中使用 pgAdmin 更改 postgres 使用者的密碼。我(現在)意識到更改密碼是個壞主意。但現在我無法回到伺服器來撤消它。Postgres 正在執行:
$ ps aux | grep postgr postgres 18888 0.0 0.1 206480 13984 ? S 16:39 0:00 /opt/PostgreSQL/9.3/bin/postgres -D /home/dev/postgres_data postgres 18889 0.0 0.0 60060 1180 ? Ss 16:39 0:00 postgres: logger process postgres 18891 0.0 0.0 206480 1376 ? Ss 16:39 0:00 postgres: checkpointer process
但是當我從命令行連接時,我收到了一個我以前從未見過的錯誤:
$ psql psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
/var/run/postgresql/
不存在。當我搜尋該錯誤時,我只獲得了Mac OS X 的點擊率,但我使用的是 Ubuntu 12.04。我能得到的最接近的是:$ psql -h localhost -U postgres psql: FATAL: password authentication failed for user "postgres" password retrieved from file "/home/dev/.pgpass"
我已經嘗試添加密碼
/home/dev/.pgpass
(實際上我在這個系統上只使用了 4 個密碼),但沒有一個允許我訪問。我嘗試與 pgAdmin 連接,結果相同。我已經重新啟動伺服器,sudo /etc/init.d/postgresql-9.3 restart
然後登錄,沒有幫助。我不知道下一步該做什麼。
Postgres 9.3,Ubuntu 12。
我認為這裡有兩個不相關的問題:
- 無法在 Unix 域套接字上連接
這部分
ps
輸出:/opt/PostgreSQL/9.3/bin/postgres -D /home/dev/postgres_data
表示您沒有執行為 Ubuntu 打包的 postgresql。Ubuntu 不會在裡面安裝它的二進製文件
/opt
(它甚至不會創建/opt
),而且你的數據目錄/home/dev/postgres_data
也是非標準的。通常的嫌疑人是使用EntrepriseDB 安裝程序安裝的 postgres 伺服器。
/var/run/postgresql
是 Ubuntu 的 postgres 的預設值unix_socket_directory
,而不是 Entreprisedb 或任何其他的。psql
對非 Ubuntu 使用 Ubuntu 附帶的命令行工具會導致您提到的此錯誤:psql:無法連接到伺服器:沒有這樣
的文件或目錄伺服器是否在本地執行並接受 Unix 域套接字“/var/run/postgresql/.s.PGSQL.5432”上的連接?
這種不匹配在 Mac OS X 上很常見,因為它有很多不兼容的 PostgreSQL 安裝程序,而且 Apple 附帶了一個沒有為它們中的任何一個配置的客戶端 postgresql。
沒有擺脫 EntrepriseDB 的 postgres 並安裝 Ubuntu(未來的好主意,但對於這個問題來說有點過分了),您需要
unix_socket_directory
找到您postgresql.conf
的./home/dev/postgres_data``ps
然後把它作為
-h
參數給psql
,這將被嘗試而不是/var/run/postgresql
. 根據手冊頁:-h 主機名,--host=主機名 指定伺服器所在機器的主機名 跑步。如果值以斜杠開頭,則將其用作 Unix 域套接字的目錄。
- 錯誤的 postgres 密碼
如果您使用 pgAdmin 成功更改了 db 密碼但無法使用它,則可能是您遇到了已知的 pgAdmin 錯誤。
應@Mark 的要求,我將把修復作為一個獨立的答案發布:
我確實設法通過編輯 pg_hba.conf 並使來自本地主機的所有連接受信任(然後通過 psql 而不是 pgadmin 編輯密碼)來重置密碼
考慮到這發生在 3 年前,這是我能做的最好的事情。