Posted at

PostgreSQL コンテナの backup / restore をする

More than 3 years have passed since last update.

Docker コンテナとして動いている PostgreSQL からデータを backup する、またデータを restore する(PostgreSQL コンテナにデータを注入する)方法です。

ここで使っているイメージは Docker Hub 公式の postgres イメージです。今回は postgres:9.4.1 を使いました。

$ docker run -d -p 5432:5432 --name postgres postgres:9.4.1


backup する

$ docker exec [container_id or name] pg_dumpall -U postgres > dump.sql

コンテナ内のデータベース全体が SQL として dump されます。


dump.sql

--

-- PostgreSQL database cluster dump
--

SET default_transaction_read_only = off;

SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;

--
-- Roles
--

CREATE ROLE postgres;
ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION;

...



restore する

他の PostgreSQL(コンテナに限らず)から取得した dump.sql が必要です。

$ cat dump.sql | docker exec -i [container_id or name] psql -U postgres

SET

SET
SET
ERROR: role "postgres" already exists
ALTER ROLE
REVOKE
REVOKE
GRANT
GRANT
You are now connected to database "postgres" as user "postgres".
SET
SET
SET
SET
SET
SET
SET
...

ちゃんとデータが流し込まれたか確認

$ docker exec -it postgres psql -U postgres

psql (9.4.1)

Type "help" for help.

postgres=# \d
List of relations
Schema | Name | Type | Owner
--------+----------------------+----------+----------
public | ramesh_images | table | postgres
public | ramesh_images_id_seq | sequence | postgres
public | schema_migrations | table | postgres
(3 rows)

postgres=#

:tada: