簡體   English   中英

將 Postgresql 數據庫還原到 Docker 容器中,以便 Postgres 啟動時數據庫就位

[英]Restore a Postgresql database into a Docker container so when Postgres starts up the DB is in place

我有一個 Postgresql 數據轉儲文件。 當我 docker 運行 postgresql 容器時,如何以還原就位的方式將該備份還原到僅數據容器中?

作為#1 penaltizes答案這太簡潔我重復一下寫

  1. 創建僅數據容器
  2. 運行一個臨時的 Postgres 容器來恢復備份。 附加僅數據容器和包含本地備份的目錄。
  3. 附加到還原容器。 在容器內,
  4. 切換到 postgresql 用戶
  5. 為要還原的數據庫創建超級用戶和匹配密碼。
  6. 用 \\q 退出 psql 會話。 還在容器內,
  7. 在命令提示符下恢復備份
  8. 創建最終的 Docker Postgres 容器。 請注意指定從上一步進行還原的數據庫的正確名稱。
  9. 刪除用於將備份恢復到僅數據卷中的容器

最簡單的方法是在主機上的單獨文件夾中創建一個空的 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 的內容復制到數據容器中

但是,您可能需要考慮這種方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM