PostgreSQL 12集群启动失败求助:无法打开指定目录
无法启动PostgreSQL 12集群:目录异常导致启动失败
我今日无法连接到PostgreSQL服务器,相关错误日志如下:
Nov 05 15:27:00 testVps postgresql@12-main[1676357]: 2022-11-05 15:27:00.582 UTC [1676373] LOG: database system was not properly shut down; automatic recovery in progress Nov 05 15:27:00 testVps postgresql@12-main[1676357]: 2022-11-05 15:27:00.585 UTC [1676373] FATAL: could not open directory "pg_tblspc/pvkar3/PG_12_201909212": Not a directory Nov 05 15:27:00 testVps postgresql@12-main[1676357]: 2022-11-05 15:27:00.588 UTC [1676372] LOG: startup process (PID 1676373) exited with exit code 1 Nov 05 15:27:00 testVps postgresql@12-main[1676357]: 2022-11-05 15:27:00.588 UTC [1676372] LOG: aborting startup due to startup process failure Nov 05 15:27:00 testVps postgresql@12-main[1676357]: 2022-11-05 15:27:00.590 UTC [1676372] LOG: database system is shut down Nov 05 15:27:00 testVps postgresql@12-main[1676357]: pg_ctl: could not start server Nov 05 15:27:00 testVps postgresql@12-main[1676357]: Examine the log output. Nov 05 15:27:00 testVps systemd[1]: postgresql@12-main.service: Can't open PID file /run/postgresql/12-main.pid (yet?) after start: Operation not permitted Nov 05 15:27:00 testVps systemd[1]: postgresql@12-main.service: Failed with result 'protocol'. Nov 05 15:27:00 testVps systemd[1]: Failed to start PostgreSQL Cluster 12-main.
问题分析
日志核心错误为 FATAL: could not open directory "pg_tblspc/pvkar3/PG_12_201909212": Not a directory,说明PostgreSQL要访问的该路径并非合法目录。结合database system was not properly shut down提示,大概率是异常关机导致表空间路径损坏、符号链接失效或目录被意外篡改。
解决步骤
定位数据目录
执行命令找到PostgreSQL 12的主数据目录:sudo -u postgres psql -c 'SHOW data_directory;'或通过systemd配置文件查询:
cat /etc/systemd/system/postgresql@12-main.service | grep PGDATA检查异常路径状态
进入数据目录下的pg_tblspc文件夹,查看pvkar3的类型:cd $(sudo -u postgres psql -t -c 'SHOW data_directory;')/pg_tblspc ls -ld pvkar3如果是符号链接,检查指向目标是否合法:
readlink pvkar3 ls -ld $(readlink pvkar3)修复目录异常
- 若
pvkar3是文件而非目录:
多由文件系统损坏导致,优先从备份恢复该表空间内容;若无备份,尝试用系统文件恢复工具找回被误删的目录。 - 若符号链接失效:
重建符号链接并设置正确权限:sudo rm pvkar3 sudo ln -s /path/to/valid/tablespace/directory pvkar3 sudo chown postgres:postgres pvkar3 - 若目录已丢失且无重要数据:
可删除失效表空间记录(操作需谨慎):- 启动单用户模式:
sudo -u postgres postgres --single -D /path/to/data/directory main - 在单用户模式下执行SQL:
DROP TABLESPACE your_tablespace_name; - 退出后重启服务。
- 启动单用户模式:
- 若
验证修复结果
重启PostgreSQL服务并检查状态:sudo systemctl start postgresql@12-main sudo systemctl status postgresql@12-main
内容的提问来源于stack exchange,提问作者Tim Dang
相关产品推荐
相关产品推荐

