升級至 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"?

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 等進程
| 現象 | 可能原因 | 解決 |
|---|---|---|
| 資料庫連線被拒 | 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 秒搞定,請收藏備用。