简述
当对PostgreSQL数据库进行版本更新时,需要迁移数据,可以使用pg_upgrade 。
pg_upgrade (原名称为 pg_migrator) 允许数据在 PostgreSQL 数据文件中升级到PostgreSQL新的大版本而不需要数据的备份/还原,通常适用在升级大版本时,例如从8.4.7升级到当前 PostgreSQL的新最新版本。 在小版本之间升级往往是不需要的, 例如 从9.0.1升级到9.0.4。
文档:http://www.postgres.cn/docs/10/pgupgrade.html
主要参数:
实践
比如从9.4升级到10.4
- 1.从9.4版本容器中获取到 PostgreSQL 的运行文件和旧的数据目录
docker cp postgres_old_container:/usr/lib/postgresql/9.4 .
docker cp postgres_old_container:/var/lib/postgresql/data/pgdata data-old
- 2.初始化一个10.4的数据目录
$ docker run --name="postgres_new" -v $(pwd)/data-new:/var/lib/postgresql/data -it --rm postgres:10.4
- 3.在10.4版本的容器下完成pg_upgrade
运行10.4容器:
$ docker run --name="tmp" -e POSTGRES_PASSWORD=postgres -v $(pwd)/9.4:/usr/lib/postgresql/9.4 -v $(pwd)/data-new:/data/new -v $(pwd)/data-old:/data/old -it --rm postgres:10.4 bash
升级:
/usr/lib/postgresql/10/bin/pg_upgrade -b /usr/lib/postgresql/9.4/bin -B /usr/lib/postgresql/10/bin -d /data/old -D /data/new