【Postgresql】数据库postgresql 10的data目录迁移(不用重新安装)

安装后默认的目录:

/var/lib/pgsql/{version}/data

1,哪儿启动的数据库?

数据库服务一般开机自动启动,那么就可以顺藤摸瓜找到相关的service。
对于postgresql10,它的服务名为postgresql-10.service,该文件的路径为:

/usr/lib/systemd/system/postgresql-10.service

postgresql-10.service的文件内容如下:

# It's not recommended to modify this file in-place, because it will be
# overwritten during package upgrades.  If you want to customize, the
# best way is to create a file "/etc/systemd/system/postgresql-10.service",
# containing
#       .include /lib/systemd/system/postgresql-10.service
#       ...make your changes here...
# For more info about custom unit files, see
# http://fedoraproject.org/wiki/Systemd#How_do_I_customize_a_unit_file.2F_add_a_custom_unit_file.3F

# Note: changing PGDATA will typically require adjusting SELinux
# configuration as well.

# Note: do not use a PGDATA pathname containing spaces, or you will
# break postgresql-setup.
[Unit]
Description=PostgreSQL 10 database server
Documentation=https://www.postgresql.org/docs/10/static/
After=syslog.target
After=network.target

[Service]
Type=notify
User=postgres
Group=postgres

# Note: avoid inserting whitespace in these Environment= lines, or you may
# break postgresql-setup.

# Location of database directory
Environment=PGDATA=/home/hadoop/pgsql/pgsql/10/data/

# Where to send early-startup messages from the server (before the logging
# options of postgresql.conf take effect)
# This is normally controlled by the global default set by systemd
# StandardOutput=syslog

# Disable OOM kill on the postmaster
OOMScoreAdjust=-1000
Environment=PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj
Environment=PG_OOM_ADJUST_VALUE=0

ExecStartPre=/usr/pgsql-10/bin/postgresql-10-check-db-dir ${PGDATA}
ExecStart=/usr/pgsql-10/bin/postmaster -D ${PGDATA}
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT


# Do not set any timeout value, so that systemd will not kill postmaster
# during crash recovery.
TimeoutSec=0

[Install]
WantedBy=multi-user.target

从上面来看里面用到了Environment,后面需要修改该变量,但是得先执行步骤2和3。

2,关闭数据库服务

service postgresql-10 stop

3,拷贝原先的data目录到新的data目录

使用命令cp,示例如下:

sudo cp -rf /var/lib/postgresql/10/ /home/hadoop/pgsql

设置用户和权限

sudo chown -R postgres:postgres /home/hadoop/pgsql
sudo chmod 700 /home/hadoop/pgsql

前面的是原data目录,后面是修改后的data目录

4,拷贝完之后,就可以修改service文件里面的enviroment变量,可以将这个变量修改为自己的data目录

sudo vi postgresql-10.service

修改PGDATA路径之后,就可以执行下面的命令让其立即生效

sudo systemctl daemon-reload

5,重启数据库

service postgresql-10 start

6,进入psql,查看当前的data_directory

按照下面三步执行

(1) su - postgres
(2)psql
(3)show data_directory;

通过上面的路径查看data目录是否已经完全更改过来

7,如果上面的目录还没更改过来,可以看到第1步里面有个环境变量,${PGDATA}

所以,这个变量在哪儿呢?
我们知道可以设置环境变量的地方之后那么几个地方,这里因为postgresql安装后会自动生成一个postgres用户,因此猜测这个用户下存在PGDATA环境变量
因此,
su - postgres ,进入postgres用户下,查看当前用户的环境变量
echo $PGDATA,打印出PGDATA变量值,可以看到这个变量值还是之前那个值。因此我们可以知道了,是这个地方有问题。
于是,修改这个用户的环境变量设置文件
vi ~/.bash_profile,修改里面的PGDATA路径
source ~/.bash_profile使文件生效

8,重启数据库

service postgresql-10 restart

9,更改postgres用户的宿主目录

查看uid
id postgres,得到uid为26

sudo usermod -d /home/hadoop/pgsql -u 26 postgres

参考:
postgresql数据库安装以及修改数据文件路径http://m.blog.itpub.net/29654823/viewspace-2147325/

<think>好的,用户问的是如何在Windows上进行PostgreSQL数据库迁移。我得先回忆一下之前看到的相关引用内容。首先,引用里提到了绿色版PostgreSQL和PostGIS的配置,还有具体的迁移步骤,比如使用pg_ctl.exe命令和修改注册表。这可能涉及到停止服务、备份数据、移动数据目录、更新注册表路径等步骤。 用户的环境都是Windows,所以需要注意路径和服务的处理。首先,需要停止正在运行的PostgreSQL服务,避免数据损坏。可以通过命令行或者服务管理器来停止服务。然后,使用pg_dump或者文件系统备份来导出数据。不过如果是迁移整个数据库集群,直接复制数据目录可能更高效,但需要确保版本一致。 接下来,移动数据目录到新位置,可能需要修改配置文件postgresql.conf中的data_directory参数。同时,注册表中的ImagePath也需要更新,指向新的数据目录路径,否则服务启动时会找不到数据。记得在注册表修改时要小心,避免错误导致系统问题。 另外,权限问题也是常见的,新位置的数据目录需要给PostgreSQL服务账户足够的权限,否则启动会失败。最后,启动服务并测试连接,确保迁移成功。如果有问题,可以查看日志文件排查错误。 用户可能需要具体的步骤和命令示例,所以应该详细列出每一步的操作,比如停止服务的命令、备份数据的命令、修改注册表的具体路径等。同时,提醒用户注意版本兼容性和权限设置,这些是迁移过程中容易出错的地方。最后,生成相关问题,帮助用户进一步了解备份恢复、不同版本迁移和故障处理的方法。</think>### 逐步说明:Windows环境下PostgreSQL数据库迁移步骤 #### 1. **停止PostgreSQL服务** ```bash # 通过命令行停止服务(以管理员身份运行CMD) "E:\zprogram\pgsql\bin\pg_ctl.exe" stop -D "E:\zprogram\pgsql\data" -m fast ``` *或通过服务管理器手动停止服务* #### 2. **备份原数据库** - **方法1:文件系统备份** ```bash # 直接复制整个数据目录(需确认无写入操作) xcopy /E /I /H "原数据目录路径" "新数据目录路径" ``` - **方法2:逻辑备份** ```bash # 使用pg_dump导出全库 "E:\zprogram\pgsql\bin\pg_dump.exe" -U postgres -Fc -f backup.dump 数据库名 ``` #### 3. **迁移数据目录** - 将数据目录(如`E:\zprogram\pgsql\data`)完整复制到新位置(如`D:\new_pgsql\data`) #### 4. **修改注册表路径** 1. 运行`regedit`打开注册表 2. 定位到路径: ``` HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\postgresql-x64-12 ``` 3. 修改`ImagePath`键值,指向新数据目录: ``` "E:\zprogram\pgsql\bin\pg_ctl.exe" runservice -D "D:\new_pgsql\data" -w ``` [^3] #### 5. **更新配置文件(可选)** - 编辑新数据目录中的`postgresql.conf`: ```ini data_directory = 'D:\new_pgsql\data' ``` #### 6. **设置目录权限** - 右键新数据目录 → 属性 → 安全 → 添加`NETWORK SERVICE`用户,赋予完全控制权限 #### 7. **启动服务** ```bash net start postgresql-x64-12 ``` #### 8. **验证迁移** ```bash psql -U postgres -c "SELECT version();" ``` ### 注意事项 1. **版本一致性**:需确保目标环境PostgreSQL版本与源环境一致[^1] 2. **路径依赖**:扩展插件(如PostGIS)需重新链接或重新安装 3. **日志排查**:若启动失败,检查`D:\new_pgsql\data\pg_log`中的日志文件
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值