萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> macOS 教學

macOS Yosemite 升級後 PostgreSQL 啟動報錯「pg_twophase 目錄遺失」一鍵修復

升級至 OS X 10.10 Yosemite 後,許多開發者發現 PostgreSQL 無法啟動,報錯:
FATAL: could not open directory "pg_twophase": No such file or directory
原因:系統升級過程清理了 PostgreSQL 資料目錄下的 空目錄(pg_tblspc、pg_twophase、pg_stat_tmp),導致啟動時找不到必要目錄而崩潰。修復極簡:手動建回這三個空目錄即可。

錯誤完整輸出

FATAL: could not open directory "pg_twophase": No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

PostgreSQL 啟動報錯截圖

根因

Yosemite 升級腳本將 /usr/local/var/postgres/ (Homebrew 預設資料目錄) 下的空目錄視為無用檔案而刪除。PostgreSQL 啟動時預期這些目錄存在:

  • pg_tblspc:表空間符號連結目錄
  • pg_twophase:兩階段提交狀態檔目錄
  • pg_stat_tmp:臨時統計檔目錄

一鍵修復指令 (終端機執行)

# 進入 PostgreSQL 資料目錄 (Homebrew 預設路徑,若自訂請調整)
cd /usr/local/var/postgres/

# 建立三個遺失的空目錄
mkdir -p pg_tblspc pg_twophase pg_stat_tmp

# 驗證
ls -la pg_tblspc pg_twophase pg_stat_tmp

驗證修復

# 啟動 PostgreSQL 服務
brew services start postgresql
# 或手動啟動
pg_ctl -D /usr/local/var/postgres start

# 檢查狀態
ps aux | grep postgres
# 應顯示 postgres: writer process 等進程

其他常見升級後 PostgreSQL 問題速查

現象可能原因解決
資料庫連線被拒postmaster.pid 殘留rm /usr/local/var/postgres/postmaster.pid 後重啟
版本不匹配 (data directory initialized by version X, now Y)大版本升級需 pg_upgrade備份資料 → brew postgresql-upgrade-database 或手動 pg_upgrade
權限錯誤資料目錄擁有者變更sudo chown -R $(whoami) /usr/local/var/postgres

結語

macOS 系統升級對 /usr/local 下的空目錄「大掃除」是已知行為。PostgreSQL、MySQL、MongoDB 等資料庫皆可能受影響。養成 升級前備份資料目錄、升級後檢查關鍵空目錄** 習慣,或改用 Docker 容器化部署資料庫,徹底隔離宿主系統升級影響。本案例修復僅需 3 條 mkdir,30 秒搞定,請收藏備用。

copyright © 萬盛學電腦網 all rights reserved