更改 PostgreSQL 的数据存储位置 📅 2026/7/1 4:31:23 更改 PostgreSQL 的数据存储位置需要移动整个数据目录并修改相关配置。以下是完整步骤1. 停止 PostgreSQL 服务# 使用 systemctl如果已配置systemctl stop postgresql-15# 或直接使用 postmasterkill-INT$(head-1/var/lib/pgsql/15/data/postmaster.pid)# 或使用 pg_ctl/usr/pgsql-15/bin/pg_ctl stop-D/var/lib/pgsql/15/data/2. 创建新数据目录# 例如移动到 /data/pgsql 目录NEW_DATA_DIR/data/pgsql/15/data# 创建新目录mkdir-p$NEW_DATA_DIR# 设置正确的权限postgres 用户chown-Rpostgres:postgres$NEW_DATA_DIRchmod700$NEW_DATA_DIR3. 复制或移动数据文件# 方法1移动数据推荐更快mv/var/lib/pgsql/15/data/*$NEW_DATA_DIR/# 方法2复制数据保留原数据cp-rp/var/lib/pgsql/15/data/*$NEW_DATA_DIR/4. 修改配置文件方法A修改 postgresql.conf# 编辑配置文件vi$NEW_DATA_DIR/postgresql.conf# 修改或添加以下行data_directory/data/pgsql/15/data方法B使用软链接不修改配置文件# 备份原目录mv/var/lib/pgsql/15/data /var/lib/pgsql/15/data_old# 创建软链接ln-s/data/pgsql/15/data /var/lib/pgsql/15/data# 确保权限正确chown-Rpostgres:postgres /var/lib/pgsql/15/data5. 启动 PostgreSQL# 使用 systemctlsystemctl start postgresql-15# 或直接启动/usr/pgsql-15/bin/postmaster-D$NEW_DATA_DIR# 或使用 pg_ctl/usr/pgsql-15/bin/pg_ctl start-D$NEW_DATA_DIR6. 验证# 检查数据目录/usr/pgsql-15/bin/psql-hlocalhost-p30004-Upostgres-cSHOW data_directory;# 查看当前配置/usr/pgsql-15/bin/psql-hlocalhost-p30004-Upostgres-cSELECT * FROM pg_settings WHERE name LIKE %data_directory%;7. 更新 systemd 服务文件如果使用 systemctl# 编辑服务文件vi/etc/systemd/system/postgresql-15.service# 或编辑 override 文件mkdir-p/etc/systemd/system/postgresql-15.service.dcat/etc/systemd/system/postgresql-15.service.d/override.confEOF [Service] EnvironmentPGDATA/data/pgsql/15/data EOF# 重新加载 systemdsystemctl daemon-reload完整脚本示例#!/bin/bash# 配置OLD_DATA/var/lib/pgsql/15/dataNEW_DATA/data/pgsql/15/dataPG_VERSION15PG_USERpostgres# 1. 停止 PostgreSQLecho停止 PostgreSQL.../usr/pgsql-15/bin/pg_ctl stop-D$OLD_DATA-mfast# 2. 创建新目录echo创建新数据目录...mkdir-p$NEW_DATAchown-R$PG_USER:$PG_USER$NEW_DATAchmod700$NEW_DATA# 3. 移动数据echo迁移数据文件...rsync-av--progress$OLD_DATA/$NEW_DATA/# 验证后可以删除原数据# rm -rf $OLD_DATA# 4. 更新配置echo更新配置文件...sed-is|data_directory .*|data_directory $NEW_DATA|$NEW_DATA/postgresql.conf# 5. 启动 PostgreSQLecho启动 PostgreSQL.../usr/pgsql-15/bin/pg_ctl start-D$NEW_DATA# 6. 验证echo验证数据目录.../usr/pgsql-15/bin/psql-hlocalhost-p30004-Upostgres-cSHOW data_directory;echo迁移完成注意事项磁盘空间确保目标目录有足够的磁盘空间权限数据目录必须属于postgres用户SELinux如果启用需要设置正确的 SELinux 上下文semanage fcontext-a-tpostgresql_db_t/data/pgsql(/.*)?restorecon-Rv/data/pgsql防火墙如果修改了端口需要更新防火墙规则检查当前数据目录# 方法1通过 SQL/usr/pgsql-15/bin/psql-hlocalhost-p30004-Upostgres-cSHOW data_directory;# 方法2查看进程psaux|greppostmaster|grep-E\-D# 方法3查看配置文件grepdata_directory /var/lib/pgsql/15/data/postgresql.conf