Brew更新后无法使用正确数据目录启动PostgreSQL
问题描述
Brew在某次操作中自动安装了postgresql@14,导致无法查看/编辑原有数据目录,于是执行了以下命令:
brew uninstall postgresql brew install postgresql@13 brew services start postgresql@13
现在存在两个数据目录:/usr/local/var/postgres/(存放重要旧数据)和/usr/local/var/postgresql@13/(新目录)。运行psql时会默认连接到新目录,如何配置让PostgreSQL使用旧数据目录启动?
日志文件内容
./~ λ: cat /usr/local/var/log/postgresql@13.log 2023-05-24 20:42:30.593 CDT [22914] 日志:正在x86_64-apple-darwin20.6.0系统上启动PostgreSQL 13.11,由Apple clang版本13.0.0(clang-1300.0.29.30)编译,64位 2023-05-24 20:42:30.594 CDT [22914] 日志:监听IPv4地址"127.0.0.1",端口5432 2023-05-24 20:42:30.594 CDT [22914] 日志:监听IPv6地址"::1",端口5432 2023-05-24 20:42:30.595 CDT [22914] 日志:监听Unix套接字"/tmp/.s.PGSQL.5432" 2023-05-24 20:42:30.602 CDT [22925] 日志:数据库系统已于2022-04-02 10:08:17 CDT关闭 2023-05-24 20:42:30.612 CDT [22914] 日志:数据库系统已准备好接受连接 2023-05-24 20:42:32.047 CDT [22934] 致命错误:数据库"<my name>"不存在 2023-05-24 20:42:54.086 CDT [23049] 致命错误:数据库"<my name>"不存在 2023-05-24 20:49:25.468 CDT [22914] 日志:收到智能关闭请求 2023-05-24 20:49:25.472 CDT [22914] 日志:后台进程"logical replication launcher"(PID 22931)以退出码1结束 2023-05-24 20:49:25.472 CDT [22926] 日志:正在关闭 2023-05-24 20:49:25.482 CDT [22914] 日志:数据库系统已关闭 2023-05-24 21:05:18.288 CDT [27353] 日志:正在x86_64-apple-darwin20.6.0系统上启动PostgreSQL 13.11,由Apple clang版本13.0.0(clang-1300.0.29.30)编译,64位 2023-05-24 21:05:18.289 CDT [27353] 日志:监听IPv4地址"127.0.0.1",端口5432 2023-05-24 21:05:18.290 CDT [27353] 日志:监听IPv6地址"::1",端口5432 2023-05-24 21:05:18.290 CDT [27353] 日志:监听Unix套接字"/tmp/.s.PGSQL.5432" 2023-05-24 21:05:18.300 CDT [27362] 日志:数据库系统已于2023-05-24 20:49:25 CDT关闭 2023-05-24 21:05:18.311 CDT [27353] 日志:数据库系统已准备好接受连接 2023-05-24 21:06:45.994 CDT [27458] 错误:第1个字符处或附近存在语法错误,错误位置为"q" 2023-05-24 21:06:45.994 CDT [27458] 语句:q SHOW data_directory; 2023-05-24 21:06:51.508 CDT [27458] 错误:第1个字符处或附近存在语法错误,错误位置为"qSHOW" 2023-05-24 21:06:51.508 CDT [27458] 语句:qSHOW data_directory; 2023-05-24 21:10:16.144 CDT [27353] 日志:收到智能关闭请求 2023-05-24 21:10:16.149 CDT [27353] 日志:后台进程"logical replication launcher"(PID 27368)以退出码1结束 2023-05-24 21:10:16.150 CDT [27363] 日志:正在关闭 2023-05-24 21:10:16.164 CDT [27353] 日志:数据库系统已关闭 2023-05-24 21:11:40.254 CDT [28647] 日志:正在x86_64-apple-darwin20.6.0系统上启动PostgreSQL 13.11,由Apple clang版本13.0.0(clang-1300.0.29.30)编译,64位 2023-05-24 21:11:40.256 CDT [28647] 日志:监听IPv4地址"127.0.0.1",端口5432 2023-05-24 21:11:40.256 CDT [28647] 日志:监听IPv6地址"::1",端口5432 2023-05-24 21:11:40.256 CDT [28647] 日志:监听Unix套接字"/tmp/.s.PGSQL.5432" 2023-05-24 21:11:40.269 CDT [28655] 日志:数据库系统已于2023-05-24 21:10:16 CDT关闭 2023-05-24 21:11:40.292 CDT [28647] 日志:数据库系统已准备好接受连接
解决步骤
1. 停止当前PostgreSQL服务
先确保postgresql@13服务处于停止状态:
brew services stop postgresql@13
2. 验证旧数据目录版本兼容性
确认旧数据目录/usr/local/var/postgres/的PostgreSQL版本与已安装的13.11兼容:
pg_controldata /usr/local/var/postgres/ | grep "Database system version"
输出需显示13.x系列版本,若版本低于13,需先执行pg_upgrade升级数据目录,否则直接启动会失败。
3. 配置使用旧数据目录
方法一:修改配置文件(持久生效)
找到postgresql@13的配置文件:
/usr/local/var/postgresql@13/postgresql.conf
编辑该文件,修改data_directory参数指向旧数据目录:
data_directory = '/usr/local/var/postgres/'
保存后重启服务:
brew services start postgresql@13
方法二:临时指定数据目录启动(测试用)
若仅需临时测试,可直接用pg_ctl指定数据目录启动:
pg_ctl -D /usr/local/var/postgres/ start
停止服务时执行:
pg_ctl -D /usr/local/var/postgres/ stop
4. 修复权限问题(若启动失败)
若启动时报权限错误,需确保PostgreSQL运行用户拥有旧目录访问权限。macOS上默认使用_postgres用户,执行以下命令修改权限:
chown -R _postgres:_postgres /usr/local/var/postgres/
5. 验证连接
服务启动后运行psql,此时会自动连接到旧数据目录中的数据库,之前的"数据库不存在"错误将消失。
内容的提问来源于stack exchange,提问作者C-RAD
相关产品推荐
相关产品推荐

