(Debian 9) 為什麼在我的本地機器上執行 postgresql 伺服器?
我開始關注https://www.postgresql.org/docs/9.6/runtime.html來設置本地 postgresql 伺服器以進行測試和開發。我發現我已經
postgresql
安裝了這個包,一個postgres
使用者已經存在,並且似乎已經有一個 postgresql 伺服器正在監聽127.0.0.1:5432
.這很奇怪,因為雖然我以前使用該
psql
命令連接到遠端 postgresql 數據庫,但我不記得曾經設置過本地 postgresql 數據庫。我嘗試使用連接到數據庫,
psql -h 127.0.0.1 -p 5432
但係統提示我輸入密碼。輸入空白密碼無效。我也嘗試使用 成為postgres
使用者su postgres
,但再次提示輸入密碼。我不知道伺服器數據目錄的位置。創建數據庫集群建議使用
/usr/local/pgsql/data
,但/usr/local/pgsql
在我嘗試設置本地伺服器時創建它之前不存在。我的終極問題是:
- 為什麼我的本地機器上執行著 postgresql 伺服器?
一些相關的問題是:
- 如何找到伺服器的數據目錄?(希望它包含日誌。)
- 如何確定
postgres
使用者的創建時間?- 如何恢復數據庫和
postgres
使用者的密碼?- 或者,我可以在不恢復數據庫密碼的情況下查看數據庫的內容嗎?
聽起來你
apt-get install postgresql
在某個時候跑了。在這種情況下,您可能擁有 Debian 的預設 PostgreSQL 設置。一些關於這方面的資訊可以在 Debian wiki 上找到,一些在/usr/share/doc/postgresql-common/README.Debian.gz
.Debian 設置支持多個“集群”(執行 PostgreSQL 實例,以及多個不同版本的 PostgreSQL)。要找出您的機器上有哪些,請執行
pg_lsclusters
:$ pg_lsclusters Ver Cluster Port Status Owner Data directory Log file 9.6 main 5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log
身份驗證的預設設置(檢查
/etc/postgresql/«version»/«cluster-name»/pg_hba.conf
- 可能/etc/postgresql/9.6/main/pg_hba.conf
)是讓本地使用者使用“身份”身份驗證,即通過檢查哪個使用者正在執行,以他們的 Unix 使用者名進行身份驗證,無需密碼提示psql
。所以要進入數據庫,這應該工作:$ sudo -u postgres psql template1
您的命令不起作用,因為您強制它使用 TCP 連接而不是本地 Unix 套接字(您仍然可以使用該
-p
選項,但這-p 5432
是預設選項,所以我省略了它)。並且預設身份驗證僅適用於 Unix 套接字。PS:Debian PostgreSQL 設置非常好。我個人使用它,並且建議堅持使用它,而不是嘗試刪除它並安裝上游包,除非你真的必須這樣做(例如,為了獲得特定版本的 PostgreSQL)。