Linux

(Debian 9) 為什麼在我的本地機器上執行 postgresql 伺服器?

  • September 27, 2019

我開始關注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)。

引用自:https://unix.stackexchange.com/questions/544100