更改PostgreSQL的数据存储位置的方法

 更新时间:2026年07月01日 09:42:22   作者:iangyu  
这篇文章详细介绍了更改PostgreSQL数据存储位置的方法,包括停止服务、创建新目录、复制数据文件、修改配置文件(包括postgresql.conf和使用软链接两种方式)以及启动服务等步骤,确保数据迁移顺利进行,需要的朋友可以参考下

更改 PostgreSQL 的数据存储位置,需要移动整个数据目录并修改相关配置。以下是完整步骤:

1. 停止 PostgreSQL 服务

# 使用 systemctl(如果已配置)
systemctl stop postgresql-15
# 或直接使用 postmaster
kill -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 -R postgres:postgres "$NEW_DATA_DIR"
chmod 700 "$NEW_DATA_DIR"

3. 复制(或移动)数据文件

# 方法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 -R postgres:postgres /var/lib/pgsql/15/data

5. 启动 PostgreSQL

# 使用 systemctl
systemctl start postgresql-15
# 或直接启动
/usr/pgsql-15/bin/postmaster -D "$NEW_DATA_DIR" &
# 或使用 pg_ctl
/usr/pgsql-15/bin/pg_ctl start -D "$NEW_DATA_DIR"

6. 验证

# 检查数据目录
/usr/pgsql-15/bin/psql -h localhost -p 30004 -U postgres -c "SHOW data_directory;"
# 查看当前配置
/usr/pgsql-15/bin/psql -h localhost -p 30004 -U postgres -c "SELECT * 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.d
cat > /etc/systemd/system/postgresql-15.service.d/override.conf << EOF
[Service]
Environment=PGDATA=/data/pgsql/15/data
EOF
# 重新加载 systemd
systemctl daemon-reload

完整脚本示例

#!/bin/bash
# 配置
OLD_DATA="/var/lib/pgsql/15/data"
NEW_DATA="/data/pgsql/15/data"
PG_VERSION="15"
PG_USER="postgres"
# 1. 停止 PostgreSQL
echo "停止 PostgreSQL..."
/usr/pgsql-15/bin/pg_ctl stop -D "$OLD_DATA" -m fast
# 2. 创建新目录
echo "创建新数据目录..."
mkdir -p "$NEW_DATA"
chown -R $PG_USER:$PG_USER "$NEW_DATA"
chmod 700 "$NEW_DATA"
# 3. 移动数据
echo "迁移数据文件..."
rsync -av --progress "$OLD_DATA/" "$NEW_DATA/"
# 验证后可以删除原数据
# rm -rf "$OLD_DATA"
# 4. 更新配置
echo "更新配置文件..."
sed -i "s|data_directory = .*|data_directory = '$NEW_DATA'|" "$NEW_DATA/postgresql.conf"
# 5. 启动 PostgreSQL
echo "启动 PostgreSQL..."
/usr/pgsql-15/bin/pg_ctl start -D "$NEW_DATA"
# 6. 验证
echo "验证数据目录..."
/usr/pgsql-15/bin/psql -h localhost -p 30004 -U postgres -c "SHOW data_directory;"
echo "迁移完成!"

注意事项

  1. 磁盘空间:确保目标目录有足够的磁盘空间
  2. 权限:数据目录必须属于 postgres 用户
  3. SELinux:如果启用,需要设置正确的 SELinux 上下文
semanage fcontext -a -t postgresql_db_t "/data/pgsql(/.*)?"
restorecon -Rv /data/pgsql
  1. 防火墙:如果修改了端口,需要更新防火墙规则

检查当前数据目录

# 方法1:通过 SQL
/usr/pgsql-15/bin/psql -h localhost -p 30004 -U postgres -c "SHOW data_directory;"
# 方法2:查看进程
ps aux | grep postmaster | grep -E "\-D"
# 方法3:查看配置文件
grep data_directory /var/lib/pgsql/15/data/postgresql.conf

以上就是更改PostgreSQL的数据存储位置的方法的详细内容,更多关于PostgreSQL数据存储位置更改的资料请关注脚本之家其它相关文章!

相关文章

  • postgresql如何兼容MySQL if函数

    postgresql如何兼容MySQL if函数

    这篇文章主要介绍了postgresql如何兼容MySQL if函数问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • PostgreSQL12.5中分区表的一些操作实例

    PostgreSQL12.5中分区表的一些操作实例

    PostgreSQL支持通过表继承进行分区,下面这篇文章主要给大家介绍了关于PostgreSQL12.5中分区表的一些操作的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • 解决PostgreSQL 执行超时的情况

    解决PostgreSQL 执行超时的情况

    这篇文章主要介绍了解决PostgreSQL 执行超时的情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 深入理解PostgreSQL的MVCC并发处理方式

    深入理解PostgreSQL的MVCC并发处理方式

    这篇文章主要介绍了深入理解PostgreSQL的MVCC并发处理方式,文中同时介绍了MVCC的缺点,需要的朋友可以参考下
    2014-07-07
  • PostgreSQL数据库管理系统快速入门

    PostgreSQL数据库管理系统快速入门

    这篇文章主要介绍了PostgreSQL数据库快速入门,PostgreSQL是一个功能强大的开源对象关系型数据库系统,他使用和扩展了SQL语言,并结合了许多安全存储和扩展最复杂数据工作负载的功能,需要的朋友可以参考下
    2023-07-07
  • PostgreSQL归档配置及自动清理归档日志的操作

    PostgreSQL归档配置及自动清理归档日志的操作

    这篇文章主要介绍了PostgreSQL归档配置及自动清理归档日志的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • PostgreSQL 用户名大小写规则小结

    PostgreSQL 用户名大小写规则小结

    PostgreSQL默认不区分用户名大小写,创建和连接时自动转为小写,使用双引号可强制区分,下面就来介绍一下PostgreSQL 用户名大小写规则,感兴趣的可以了解一下
    2025-06-06
  • Postgresql 赋予用户权限和撤销权限的实例

    Postgresql 赋予用户权限和撤销权限的实例

    这篇文章主要介绍了Postgresql 赋予用户权限和撤销权限的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 详解PostgreSQL 14.4安装使用及一些安装的异常问题

    详解PostgreSQL 14.4安装使用及一些安装的异常问题

    这篇文章主要介绍了PostgreSQL 14.4的安装以及使用以及一些安装的异常,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • postgresql 赋权语句 grant的正确使用说明

    postgresql 赋权语句 grant的正确使用说明

    这篇文章主要介绍了postgresql 赋权语句 grant的正确使用说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01

最新评论