将PostgreSQL数据移动到其他驱动器


20

我正在使用AWS作为我的云环境。我将PostgreSQL与根实例卷安装在同一驱动器上。我已将第二个驱动器连接并安装到我的实例。现在,我想将所有PostgreSQL数据移动到其他驱动器。我仍处于开发模式,因此如果此时可以简化传输,则可以删除旧数据。做这个的最好方式是什么?

我应该看看PostgreSQL表空间吗?


1
如果要将数据库的一部分移动到单独的驱动器上,表空间将是一种解决方法。
Erwin Brandstetter

这个回答表明,tablespaces应该不是去外部硬盘驱动器上:dba.stackexchange.com/a/62037/41823不知道我理解的风险,如果你已经把对外部数据?
Statwonk 2014年

Answers:


19

请执行以下操作:

  1. 关闭PostgreSQL
  2. 确保PostgreSQL不再运行
  3. 检查PostgreSQL是否真的停止了
  4. 将旧数据目录复制到新驱动器
    这通常是通过服务的命令行参数(-D)或PGDATA环境变量来定义的。
  5. 更新PostgreSQL配置(服务,环境var)以指向新的数据目录。
  6. 如果复制了数据,请重命名旧的数据目录以确保PostgreSQL再也找不到它了。这样,如果配置不正确,您将收到一条错误消息。
  7. 启动服务
  8. 如果一切正常,则可以删除旧目录。

在第四点,“这通常是通过命令行参数定义...”是什么意思?
codecool 2012年

@codecool:有几种不同的定义方式。通常,它是服务定义的一部分。但这取决于您的操作系统,发行版和个人更改。
a_horse_with_no_name 2012年

这可行,但是我使用regedit而不是Windows的命令行。ew。我的磁盘即将用完空间,但是现在我可以在有足够空间的其他地方安全地运行它。
2016年

这是一个分步介绍的不错的博客文章,其中包含特定的详细信息,包括典型的ubuntu和9.5 DB版本的最新信息:digitalocean.com/community/tutorials/…–
JaakL

4
  1. 停止Postgresql服务
  2. cp -a source_data_directory destination_data_directory
  3. chown -R postgres_user / destination_data_directory
  4. 导出PGDATA = destination_data_directory
  5. 将数据目录更改为postgresql.conf中的destination_data_directory
  6. pg_ctl开始

我很高兴您记得chown新文件夹的命令。
RolandoMySQLDBA'5

0

这是在Arch Linux上如何将现有PostgreSQL数据库移动到新位置(文件夹,分区)的说明(此过程对于其他Linux发行版应与此类似)。

pg_dumpall是一种实用程序,用于将群集的所有PostgreSQL数据库写出(转储)到一个脚本文件中。...它通过调用pg_dump集群中的每个数据库来实现。...

例如:

## To dump all databases:
$ pg_dumpall > /tmp/db.out               ## backup all postgres databases to file
$ pg_dumpall -Fc dbname > /tmp/outfile   ## backup a database

## To reload database(s) from that file:
$ psql -f /tmp/db.out postgres

TL / DR

你需要:

  • 导出(pg_dumpall)数据库
  • 创建新的EMPTY目录
  • 编辑postgresql.conf文件
  • 重新启动postgres服务器服务
  • 将转储文件中的旧数据加载到新数据库中

命令摘要

我要留下我的shell提示(主机名...),以便在继续操作时弄清楚我所在的shell。

[victoria@victoria ~]$ postgres --version     ## postgres (PostgreSQL) 11.2
[victoria@victoria claws]$ sudo -u postgres -i
[postgres@victoria ~]$ pg_dumpall > /tmp/db.out
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;              ## /var/lib/postgres/data
[postgres]# exit
[victoria@victoria postgres]$ mkdir /mnt/Vancouver/programming/rdb/postgres/postgresdb
## IMPORTANT: dir must be empty:
[victoria@victoria postgres]$ l postgresdb/   ## total 0
[victoria@victoria postgres]$ sudo chown postgres:root /mnt/Vancouver/programming/rdb/postgres/postgresdb/
[victoria@victoria postgres]$ sudo systemctl status postgresql
  ...
  May 02 19:55:21 victoria systemd[1]: Started PostgreSQL database server.
[postgres@victoria ~]$ initdb --locale en_US.UTF-8 -E UTF8 -D '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[postgres@victoria ~]$ exit
[victoria@victoria postgres]$ sudo vim /var/lib/postgres/data/postgresql.conf
  ## added line:
  data_directory = '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /var/lib/postgres/data   ## << Old dir; need to restart postgresql service
[postgres]# \q
[victoria@victoria postgres]$ sudo systemctl restart postgresql
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /mnt/Vancouver/programming/rdb/postgres/postgresdb/data
[postgres]# \q
[postgres@victoria ~]$ psql -f /tmp/db.out postgres
  SET
  SET
  SET
  CREATE ROLE
  ALTER ROLE
  [ ... SNIP! ... ]
[postgres@victoria ~]$ exit
## Done!  :-D

请参阅我随附的博客文章“ 如何在Arch Linux上移动现有PostgreSQL数据库”以获取注释的代码和输出。


参考文献

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.