将Postgresql数据库还原到Docker容器中,以便在Postgres启动时,数据库就位

时间:2016-03-29 18:20:51

标签: postgresql docker database-restore

我有一个Postgresql数据转储文件。当docker运行postgresql容器时,如何以恢复到位的方式将该备份恢复到仅数据容器中?

2 个答案:

答案 0 :(得分:1)

由于Stackoverflow惩罚了简洁的答案,我重复写的内容there

  1. 创建仅限数据的容器
  2. 运行临时Postgres容器以恢复备份。附加仅数据容器和包含本地备份的目录。
  3. 附加到还原容器。在容器内,
  4. 切换到postgresql用户
  5. 为要还原的数据库创建超级用户和匹配密码。
  6. 使用\ q退出psql会话。仍然在容器内,
  7. 在命令提示符下恢复备份
  8. 创建最终的Docker Postgres容器。请注意,指定从上一步执行还原的数据库的正确名称。
  9. 删除用于将备份还原到仅数据卷的容器

答案 1 :(得分:0)

最简单的方法是在主机上的单独文件夹中创建一个空的postgresql数据库,然后启动PostgreSQL守护程序,然后导入数据,然后将其简单地挂载到容器中。使用下面的脚本,您可以在/tmp/postgres-mem文件夹中创建数据库,然后将数据导入其中。

#!/bin/bash

export PGDIR=/tmp/postgres-mem

pg_ctl -D "$PGDIR" stop

rm -vfr "$PGDIR"

mkdir "$PGDIR"

pg_ctl init -D "$PGDIR"

pg_ctl -D "$PGDIR" start -o "-h localhost -c fsync=off -c synchronous_commit=off -c full_page_writes=off -c log_destination='stderr' -c logging_collector=on -c log_directory='pg_log' -c log_filename='postgresql-%Y-%m-%d_%H%M%S.log' -c log_statement='all' -k /tmp/postgres-mem"

sleep 3

psql -h localhost -c 'create user cooluser with superuser' template1
psql -h localhost -c 'create database "whatever"' template1

然后

psql -U cooluser whatever < your_dump_file.sql

然后将/ tmp / postgres-mem的内容复制到数据容器中

但您可能需要考虑this approach