如何移动PostgreSQL 13数据库的位置

3
我正在寻找将一个 pgsql 13 数据库从默认位置移动到另一块磁盘的方法。
我最初按照这个指南 link 进行操作。
但是这个指南是针对 v9.5 的,而不是 13。我的挑战在于,通过运行下面的命令找到的数据库位置也是配置文件存储的位置。
SHOW data_directory;
     data_directory
------------------------
 /var/lib/pgsql/13/data
(1 row)

SHOW config_file;
     config_file
----------------------------------------
 /var/lib/pgsql/13/data/postgresql.conf
(1 row)

使用9.5版本后,配置文件位于单独的区域,所以我在这个步骤卡住了。

如果我想移动数据库位置,似乎也必须移动所有的配置文件。

我尝试将整个数据文件夹移动到新位置并重新启动postgres,但没有成功。

任何帮助都将不胜感激。


2
“在9.5版本中,配置文件位于单独的区域” - 不是的。然而,一些Linux发行版确实将配置文件与数据目录分开。但例如在CentOS上,配置文件始终位于数据目录中。 - user330315
2
“我已经尝试将整个数据文件夹移动到新位置并重新启动Postgres,但没有成功。” 这是正确的方法,但您需要更改服务定义以使用新的数据目录。如何更改取决于您的Linux发行版。 - user330315
1个回答

6
假设您的配置文件位于 $PG_DATA 目录下:
  1. 关闭(旧)数据库。
  2. 将数据目录复制到新位置(使用 cp -rp, 或者 rsync -acv, 或者 tar, 或者 cpio, ...)。确保用复制方式保留文件属性和所有权。 pgdata 目录应该是 mode == 0600,拥有者.组 == postgres.postgres
  3. [可选] 重命名旧数据目录。
  4. [可选] 您可能需要在新位置编辑配置文件。
  5. 编辑启动文件(在 /etc/init.d/postgresql 中),确保 $PG_DATA 指向新位置。[注意:这适用于Ubuntu;其他发行版可能使用不同的启动机制]
  6. 启动新数据库,并检查是否运行正常 (ps auxw| grep postgres),并且可以连接 (psql -U postgres postgres)。
  7. [可选] 删除旧位置的目录树。

非常感谢您的回复,不幸的是,在init.d中没有与postgresql相关的启动文件。 - fraserc182
我找到了这个文件,它位于 /usr/lib/systemd/system/postgresql-13.service。 一旦我找到了它,我按照您的步骤进行操作,问题已经解决了,无需编辑配置文件,因为它正在查看 ConfigDir,该目录已设置为环境变量 $PG_DATA。感谢您的帮助。 - fraserc182

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接