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
相关产品推荐
相关产品推荐

