PostgreSQL

关注公众号 jb51net

关闭
首页 > 数据库 > PostgreSQL > PostgreSQL数据存储位置更改

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

作者: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数据存储位置更改的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文