You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL 12流复制配置中误删主目录文件,服务启动失败求助

解决PostgreSQL 12手动删除数据目录后的启动失败问题

问题背景

配置PostgreSQL 12物理流复制时,执行sudo -u postgres rm -r /var/lib/postgresql/12/main/*报错(通配符未被shell解析,导致找不到文件),手动删除/var/lib/postgresql/12/main/下所有文件后,卸载重装PostgreSQL 12无法启动服务,提示找不到/var/lib/postgresql/12/main/global/pg_internal.init文件。

解决步骤

1. 彻底清理PostgreSQL残留文件

先完全卸载并清除所有相关配置、数据文件:

sudo apt-get --purge remove postgresql-12 postgresql-client-12 postgresql-common
sudo rm -rf /var/lib/postgresql/
sudo rm -rf /etc/postgresql/
sudo rm -rf /var/log/postgresql/

注意:此操作会删除所有PostgreSQL相关数据和配置,确认无需要保留的内容后再执行。

2. 重新安装PostgreSQL 12

更新源后重新安装:

sudo apt update
sudo apt -y install postgresql-12 postgresql-client-12

3. 手动初始化数据库实例

Ubuntu/Debian环境下,可使用pg_createcluster快速创建并启动实例:

sudo pg_createcluster 12 main --start

如果上述命令失效,可切换到postgres用户手动初始化:

sudo -u postgres initdb -D /var/lib/postgresql/12/main/

初始化完成后启动服务:

sudo systemctl start postgresql@12-main.service

4. 验证服务状态

检查服务运行状态:

sudo systemctl status postgresql@12-main.service

测试数据库连接:

sudo -u postgres psql

补充:最初rm命令报错的原因及正确写法

执行sudo -u postgres rm -r /var/lib/postgresql/12/main/*时,*作为shell通配符,在切换到postgres用户时未被解析(受限shell或无通配符扩展),导致直接将*作为文件名查找。正确写法应让bash解析通配符:

sudo -u postgres bash -c 'rm -r /var/lib/postgresql/12/main/*'

内容的提问来源于stack exchange,提问作者Arbaaz Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:26:01