kakiro-webカキローウェブ

システム開発情報とコンピューター書籍の紹介サイト

PostgreSQL 全てのデータベースのバックアップとリストア

PostgreSQLで全てのデータベースのバックアップを作成する方法と、リストアを行う方法について、以下に示します。

※ここで説明に使用しているPostgreSQLは、当サイトのCentOS7 64bitのyumリポジトリにPostgreSQLを追加し、最新バージョンをインストールのページを元にインストールした、バージョン9.4になります。

※特定のデータベースのバックアップとリストアについては、当サイトのPostgreSQL 特定のデータベースのバックアップとリストアのページをご覧ください。

※データベース接続ユーザー(ロール)のバックアップとリストアについては、当サイトのPostgreSQL データベース接続ユーザー(ロール)のバックアップとリストアのページをご覧ください。

※データ定義(データベース定義、テーブル定義)のみのバックアップ、データのみのバックアップについては、当サイトのPostgreSQL データ定義(データベース定義、テーブル定義)のみのバックアップ、データのみのバックアップのページをご覧ください。

動作確認用のデータベース接続ユーザーの作成

ここでは、データベースのバックアップとリストアの動作確認用に、以下のようなデータベース接続ユーザーを使用します。

データベース接続ユーザー「user01」を作成

データベース接続ユーザー「user01」を以下のように作成します。

postgres=# CREATE ROLE user01 LOGIN PASSWORD 'pass01';

データベース接続ユーザー「user02」を作成

データベース接続ユーザー「user02」を以下のように作成します。

postgres=# CREATE ROLE user02 LOGIN PASSWORD 'pass02';

動作確認用のデータベース「db01」の作成

ここでは、データベースのバックアップとリストアの動作確認用に、以下のようなデータベース「db01」を使用します。

データベース「db01」を作成

データベース「db01」を以下のように作成します。

postgres=# CREATE DATABASE db01 OWNER = user01 TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'C' LC_CTYPE = 'C';

以降のデータベース「db01」へのテーブルの作成、データの登録は、データベース「db01」に所有者「user01」で接続した状態で行うものとします。

データベース「db01」にテーブル「tbl11」を作成

データベース「db01」にテーブル「tbl11」を以下のように作成します。

db01=> CREATE TABLE tbl11 (id CHAR(5) NOT NULL, num11 INTEGER, txt11 VARCHAR(50), date11 TIMESTAMP WITHOUT TIME ZONE, CONSTRAINT pk_tbl11 PRIMARY KEY (id));

テーブル「tbl11」にデータを登録

テーブル「tbl11」に以下のようなデータを登録します。

db01=> INSERT INTO tbl11 (id, num11, txt11, date11) VALUES ('00001', 1, '①あ〜あ001', '2015-01-02 03:04:05');
db01=> INSERT INTO tbl11 (id, num11, txt11, date11) VALUES ('00002', 2, '②い〜い002', '2015-11-12 13:14:15');

データベース「db01」にテーブル「tbl12」を作成

データベース「db01」にテーブル「tbl12」を以下のように作成します。

db01=> CREATE TABLE tbl12 (num12 SERIAL NOT NULL, txt12 VARCHAR(30), date12 TIMESTAMP WITHOUT TIME ZONE, CONSTRAINT pk_tbl12 PRIMARY KEY (num12));

テーブル「tbl12」にデータを登録

テーブル「tbl12」に以下のようなデータを登録します。

db01=> INSERT INTO tbl12 (txt12, date12) VALUES ('aaa', '2015-01-01 00:00:00');
db01=> INSERT INTO tbl12 (txt12, date12) VALUES ('bbb', '2015-01-01 01:00:00');

動作確認用のデータベース「db02」の作成

ここでは、データベースのバックアップとリストアの動作確認用に、以下のようなデータベース「db02」を使用します。

データベース「db02」を作成

データベース「db02」を以下のように作成します。

postgres=# CREATE DATABASE db02 OWNER = user02 TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'C' LC_CTYPE = 'C';

以降のデータベース「db02」へのテーブルの作成、データの登録は、データベース「db02」に所有者「user02」で接続した状態で行うものとします。

データベース「db02」にテーブル「tbl21」を作成

データベース「db02」にテーブル「tbl21」を以下のように作成します。

db02=> CREATE TABLE tbl21 (id CHAR(3) NOT NULL, num21 INTEGER, txt21 VARCHAR(40), date21 TIMESTAMP WITHOUT TIME ZONE, CONSTRAINT pk_tbl21 PRIMARY KEY (id));

テーブル「tbl21」にデータを登録

テーブル「tbl21」に以下のようなデータを登録します。

db02=> INSERT INTO tbl21 (id, num21, txt21, date21) VALUES ('101', 11, 'あああ', '2015-02-01 01:02:03');
db02=> INSERT INTO tbl21 (id, num21, txt21, date21) VALUES ('102', 12, 'いいい', '2015-02-02 04:05:06');

データベース「db02」にテーブル「tbl22」を作成

データベース「db02」にテーブル「tbl22」を以下のように作成します。

db02=> CREATE TABLE tbl22 (num22 SERIAL NOT NULL, txt22 VARCHAR(20), date22 TIMESTAMP WITHOUT TIME ZONE, CONSTRAINT pk_tbl22 PRIMARY KEY (num22));

テーブル「tbl22」にデータを登録

テーブル「tbl22」に以下のようなデータを登録します。

db02=> INSERT INTO tbl22 (txt22, date22) VALUES ('AAA', '2015-02-01 01:00:00');
db02=> INSERT INTO tbl22 (txt22, date22) VALUES ('BBB', '2015-02-01 02:00:00');

動作確認用のデータベース接続ユーザーに権限を付与

ここでは、データベースのバックアップとリストアの動作確認用に、以下のような権限を付与されたデータベース接続ユーザーを使用します。

データベース接続ユーザー「user01」に権限を付与

データベース接続ユーザー「user01」に以下のような権限を付与します。

データベース「db02」に所有者「user02」で接続した状態で行うものとします。

db02=> GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO user01;

全てのデータベースのバックアップを作成

全てのデータベースのバックアップを作成するには、以下のようなコマンドを実行します。

# su - postgres
$ pg_dumpall --clean --if-exists --inserts > /xxx/postgresql/dump/all.sql
  • 全てのデータベースのバックアップの作成には、「pg_dumpall」コマンドを使用します。

  • 「pg_dumpall」コマンドでのデータベースへの接続時にパスワード認証を使用すると、パスワードの入力が最初の接続時と、バックアップ対象の各データベースへの接続時に必要となります。

    ここでは、パスワードの入力が不要となるpeer認証を使用するため、「su」コマンドでユーザーを「postgres」に切り替えてから、「pg_dumpall」コマンドを実行するようにしています。

  • 「--clean」オプションを指定すると、データベース接続ユーザーとデータベースのCREATE文の前に、DROP文が出力されるようになります。

    「--if-exists」オプションも指定することで、DROP文には「IF EXISTS」が付くようになります。

  • 「--inserts」オプションを指定すると、データのバックアップはCOPY文ではなく、INSERT文を使用して行われるようになります。

  • リダイレクトを使用して、バックアップの内容をファイルに出力するようにします。

    ここでは、ディレクトリ「/xxx/postgresql/dump/」に、ファイル名「all.sql」で出力するようにしています。

    出力先のディレクトリには、ユーザー「postgres」による書き込み権限が必要となります。

作成されたバックアップの内容は、以下のようになります。

--
-- PostgreSQL database cluster dump
--

SET default_transaction_read_only = off;

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

--
-- Drop databases
--

DROP DATABASE IF EXISTS db01;
DROP DATABASE IF EXISTS db02;




--
-- Drop roles
--

DROP ROLE IF EXISTS postgres;
DROP ROLE IF EXISTS user01;
DROP ROLE IF EXISTS user02;


--
-- Roles
--

CREATE ROLE postgres;
ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION PASSWORD 'md532e12f215ba27cb750c9e093ce4b5127';
CREATE ROLE user01;
ALTER ROLE user01 WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION PASSWORD 'md53190bd72fda98853c755257d817aefdb';
CREATE ROLE user02;
ALTER ROLE user02 WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION PASSWORD 'md5a734509272668d8c5e087c48af5ea20c';






--
-- Database creation
--

CREATE DATABASE db01 WITH TEMPLATE = template0 OWNER = user01 LC_COLLATE = 'C' LC_CTYPE = 'C';
CREATE DATABASE db02 WITH TEMPLATE = template0 OWNER = user02 LC_COLLATE = 'C' LC_CTYPE = 'C';
REVOKE ALL ON DATABASE template1 FROM PUBLIC;
REVOKE ALL ON DATABASE template1 FROM postgres;
GRANT ALL ON DATABASE template1 TO postgres;
GRANT CONNECT ON DATABASE template1 TO PUBLIC;


\connect db01

SET default_transaction_read_only = off;

--
-- PostgreSQL database dump
--

SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;

--
-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner:
--

CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;


--
-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner:
--

COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';


SET search_path = public, pg_catalog;

SET default_tablespace = '';

SET default_with_oids = false;

--
-- Name: tbl11; Type: TABLE; Schema: public; Owner: user01; Tablespace:
--

CREATE TABLE tbl11 (
    id character(5) NOT NULL,
    num11 integer,
    txt11 character varying(50),
    date11 timestamp without time zone
);


ALTER TABLE tbl11 OWNER TO user01;

--
-- Name: tbl12; Type: TABLE; Schema: public; Owner: user01; Tablespace:
--

CREATE TABLE tbl12 (
    num12 integer NOT NULL,
    txt12 character varying(30),
    date12 timestamp without time zone
);

ALTER TABLE tbl12 OWNER TO user01;

--
-- Name: tbl12_num12_seq; Type: SEQUENCE; Schema: public; Owner: user01
--

CREATE SEQUENCE tbl12_num12_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


ALTER TABLE tbl12_num12_seq OWNER TO user01;

--
-- Name: tbl12_num12_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: user01
--

ALTER SEQUENCE tbl12_num12_seq OWNED BY tbl12.num12;


--
-- Name: num12; Type: DEFAULT; Schema: public; Owner: user01
--

ALTER TABLE ONLY tbl12 ALTER COLUMN num12 SET DEFAULT nextval('tbl12_num12_seq'::regclass);


--
-- Data for Name: tbl11; Type: TABLE DATA; Schema: public; Owner: user01
--

INSERT INTO tbl11 VALUES ('00001', 1, '①あ〜あ001', '2015-01-02 03:04:05');
INSERT INTO tbl11 VALUES ('00002', 2, '②い〜い002', '2015-11-12 13:14:15');


--
-- Data for Name: tbl12; Type: TABLE DATA; Schema: public; Owner: user01
--

INSERT INTO tbl12 VALUES (1, 'aaa', '2015-01-01 00:00:00');
INSERT INTO tbl12 VALUES (2, 'bbb', '2015-01-01 01:00:00');


--
-- Name: tbl12_num12_seq; Type: SEQUENCE SET; Schema: public; Owner: user01
--

SELECT pg_catalog.setval('tbl12_num12_seq', 2, true);


--
-- Name: pk_tbl11; Type: CONSTRAINT; Schema: public; Owner: user01; Tablespace:
--

ALTER TABLE ONLY tbl11
    ADD CONSTRAINT pk_tbl11 PRIMARY KEY (id);


--
-- Name: pk_tbl12; Type: CONSTRAINT; Schema: public; Owner: user01; Tablespace:
--

ALTER TABLE ONLY tbl12
    ADD CONSTRAINT pk_tbl12 PRIMARY KEY (num12);


--
-- Name: public; Type: ACL; Schema: -; Owner: postgres
--

REVOKE ALL ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON SCHEMA public FROM postgres;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO PUBLIC;


--
-- PostgreSQL database dump complete
--

\connect db02

SET default_transaction_read_only = off;

--
-- PostgreSQL database dump
--

SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;

--
-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner:
--

CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;


--
-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner:
--

COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';


SET search_path = public, pg_catalog;

SET default_tablespace = '';

SET default_with_oids = false;

--
-- Name: tbl21; Type: TABLE; Schema: public; Owner: user02; Tablespace:
--

CREATE TABLE tbl21 (
    id character(3) NOT NULL,
    num21 integer,
    txt21 character varying(40),
    date21 timestamp without time zone
);


ALTER TABLE tbl21 OWNER TO user02;

--
-- Name: tbl22; Type: TABLE; Schema: public; Owner: user02; Tablespace:
--

CREATE TABLE tbl22 (
    num22 integer NOT NULL,
    txt22 character varying(20),
    date22 timestamp without time zone
);


ALTER TABLE tbl22 OWNER TO user02;

--
-- Name: tbl22_num22_seq; Type: SEQUENCE; Schema: public; Owner: user02
--

CREATE SEQUENCE tbl22_num22_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


ALTER TABLE tbl22_num22_seq OWNER TO user02;

--
-- Name: tbl22_num22_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: user02
--

ALTER SEQUENCE tbl22_num22_seq OWNED BY tbl22.num22;


--
-- Name: num22; Type: DEFAULT; Schema: public; Owner: user02
--

ALTER TABLE ONLY tbl22 ALTER COLUMN num22 SET DEFAULT nextval('tbl22_num22_seq'::regclass);


--
-- Data for Name: tbl21; Type: TABLE DATA; Schema: public; Owner: user02
--

INSERT INTO tbl21 VALUES ('101', 11, 'あああ', '2015-02-01 01:02:03');
INSERT INTO tbl21 VALUES ('102', 12, 'いいい', '2015-02-02 04:05:06');


--
-- Data for Name: tbl22; Type: TABLE DATA; Schema: public; Owner: user02
--

INSERT INTO tbl22 VALUES (1, 'AAA', '2015-02-01 01:00:00');
INSERT INTO tbl22 VALUES (2, 'BBB', '2015-02-01 02:00:00');


--
-- Name: tbl22_num22_seq; Type: SEQUENCE SET; Schema: public; Owner: user02
--

SELECT pg_catalog.setval('tbl22_num22_seq', 2, true);


--
-- Name: pk_tbl21; Type: CONSTRAINT; Schema: public; Owner: user02; Tablespace:
--

ALTER TABLE ONLY tbl21
    ADD CONSTRAINT pk_tbl21 PRIMARY KEY (id);


--
-- Name: pk_tbl22; Type: CONSTRAINT; Schema: public; Owner: user02; Tablespace:
--

ALTER TABLE ONLY tbl22
    ADD CONSTRAINT pk_tbl22 PRIMARY KEY (num22);


--
-- Name: public; Type: ACL; Schema: -; Owner: postgres
--

REVOKE ALL ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON SCHEMA public FROM postgres;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO PUBLIC;


--
-- Name: tbl21; Type: ACL; Schema: public; Owner: user02
--

REVOKE ALL ON TABLE tbl21 FROM PUBLIC;
REVOKE ALL ON TABLE tbl21 FROM user02;
GRANT ALL ON TABLE tbl21 TO user02;
GRANT ALL ON TABLE tbl21 TO user01;


--
-- Name: tbl22; Type: ACL; Schema: public; Owner: user02
--

REVOKE ALL ON TABLE tbl22 FROM PUBLIC;
REVOKE ALL ON TABLE tbl22 FROM user02;
GRANT ALL ON TABLE tbl22 TO user02;
GRANT ALL ON TABLE tbl22 TO user01;


--
-- PostgreSQL database dump complete
--

\connect postgres

SET default_transaction_read_only = off;

--
-- PostgreSQL database dump
--

SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;

--
-- Name: postgres; Type: COMMENT; Schema: -; Owner: postgres
--

COMMENT ON DATABASE postgres IS 'default administrative connection database';


--
-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner:
--

CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;


--
-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner:
--

COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';


--
-- Name: public; Type: ACL; Schema: -; Owner: postgres
--

REVOKE ALL ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON SCHEMA public FROM postgres;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO PUBLIC;


--
-- PostgreSQL database dump complete
--

\connect template1

SET default_transaction_read_only = off;

--
-- PostgreSQL database dump
--

SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;

--
-- Name: template1; Type: COMMENT; Schema: -; Owner: postgres
--

COMMENT ON DATABASE template1 IS 'default template for new databases';


--
-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner:
--

CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;


--
-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner:
--

COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';


--
-- Name: public; Type: ACL; Schema: -; Owner: postgres
--

REVOKE ALL ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON SCHEMA public FROM postgres;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO PUBLIC;


--
-- PostgreSQL database dump complete
--

--
-- PostgreSQL database cluster dump complete
--
  • 全てのデータベースをバックアップ対象に指定した場合、新しく作成したデータベース「db01」、「db02」と、PostgreSQLにデフォルトで用意されているデータベース「postgres」と「template1」のバックアップが作成されます。

  • バックアップの内容は、データベース接続ユーザーの作成、データベースの作成を行った後、各データベースに接続し、テーブルの作成、データの登録等を行っていく流れになっています。

  • データベース「db01」は、所有者を「user01」とし、他のユーザーに権限は付与していないため、ユーザー「user01」、「user02」の権限に関するSQLは出力されていません。

    それに対し、データベース「db02」では、所有者を「user02」とし、ユーザー「user01」に権限を付与していますが、ユーザー「user01」、「user02」両方の権限に関するSQLが出力されています。

全てのデータベースのバックアップからのリストア

上記で取得した全てのデータベースのバックアップ「all.sql」からリストアを行うには、以下のようなコマンドを実行します。

# su - postgres
$ psql -f /xxx/postgresql/dump/all.sql postgres
SET
SET
SET
psql:/xxx/postgresql/dump/all.sql:14: NOTICE:  データベース"db01"は存在しません。省略します
DROP DATABASE
psql:/xxx/postgresql/dump/all.sql:15: NOTICE:  データベース"db02"は存在しません。省略します
DROP DATABASE
psql:/xxx/postgresql/dump/all.sql:24: ERROR:  現在のユーザを削除できません
psql:/xxx/postgresql/dump/all.sql:25: NOTICE:  ロール"user01"は存在しません。省略します
DROP ROLE
psql:/xxx/postgresql/dump/all.sql:26: NOTICE:  ロール"user02"は存在しません。省略します
DROP ROLE
psql:/xxx/postgresql/dump/all.sql:33: ERROR:  ロール"postgres"はすでに存在します
ALTER ROLE
CREATE ROLE
ALTER ROLE
CREATE ROLE
ALTER ROLE
CREATE DATABASE
CREATE DATABASE
REVOKE
REVOKE
GRANT
GRANT
データベース "db01" にユーザ"postgres"として接続しました。
SET
SET
SET
SET
SET
SET
SET
CREATE EXTENSION
COMMENT
SET
SET
SET
CREATE TABLE
ALTER TABLE
CREATE TABLE
ALTER TABLE
CREATE SEQUENCE
ALTER TABLE
ALTER SEQUENCE
ALTER TABLE
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
 setval
--------
      2
(1 行)

ALTER TABLE
ALTER TABLE
REVOKE
REVOKE
GRANT
GRANT
データベース "db02" にユーザ"postgres"として接続しました。
SET
SET
SET
SET
SET
SET
SET
CREATE EXTENSION
COMMENT
SET
SET
SET
CREATE TABLE
ALTER TABLE
CREATE TABLE
ALTER TABLE
CREATE SEQUENCE
ALTER TABLE
ALTER SEQUENCE
ALTER TABLE
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
 setval
--------
      2
(1 行)

ALTER TABLE
ALTER TABLE
REVOKE
REVOKE
GRANT
GRANT
REVOKE
REVOKE
GRANT
GRANT
REVOKE
REVOKE
GRANT
GRANT
データベース "postgres" にユーザ"postgres"として接続しました。
SET
SET
SET
SET
SET
SET
SET
COMMENT
CREATE EXTENSION
COMMENT
REVOKE
REVOKE
GRANT
GRANT
データベース "template1" にユーザ"postgres"として接続しました。
SET
SET
SET
SET
SET
SET
SET
COMMENT
CREATE EXTENSION
COMMENT
REVOKE
REVOKE
GRANT
GRANT
  • 平文のSQLで出力されたバックアップからのリストアには、「psql」コマンドを使用します。

  • 「psql」コマンドでのデータベースのリストア時にパスワード認証を使用すると、postgresのパスワードがリストア前とバックアップの内容で異なる場合は、リストア時の各データベースへの接続でエラーになってしまいます。

    ここでは、パスワードの入力が不要となるpeer認証を使用するため、「su」コマンドでユーザーを「postgres」に切り替えてから、「psql」コマンドを実行するようにしています。

    ※「psql」コマンドでのデータベースへの接続を「postgres」以外のバックアップには含まれていないスーパーユーザーで行いリストアを行う場合は、パスワード認証を使用することもできます。

  • 「-f」オプションで、リストアを行うバックアップファイルを指定します。

    ここでは、ディレクトリ「/xxx/postgresql/dump/」にある、ファイル「all.sql」を指定しています。

  • 最後に「postgres」と指定し、リストア時に接続するデータベースを「postgres」にしています。

    「postgres」は、PostgreSQLでデフォルトで用意されているデータベースになります。

    尚、リストア時に接続するデータベースの名前は、コマンドの引数ではなく、「-d」オプションで指定することもできます。

  • 「psql:/xxx/postgresql/dump/all.sql:24: ERROR: 現在のユーザを削除できません」と表示されているエラーは、「psql」コマンドでデータベースへの接続に使用しているユーザー「postgres」が削除できないことによるものになります。

    「psql:/xxx/postgresql/dump/all.sql:33: ERROR: ロール"postgres"はすでに存在します」と表示されているエラーは、ユーザー「postgres」が削除できなかった状態で、作成しようとしたことによるものになります。

    「psql」コマンドでのデータベースへの接続を「postgres」以外のスーパーユーザーで行ったとしても、ユーザー「postgres」の削除は、「データベースシステムが必要としているためロール postgresを削除できません」のようにエラーとなり行えません。

    ユーザー「postgres」の削除と作成でエラーにはなりますが、バックアップに含まれるALTER ROLE文は実行されますので、結果としては問題のないようになります。

PostgreSQL 全てのデータベースのバックアップとリストアについては、以上です。

SQLのテクニックに関するおすすめの書籍

当サイトの書籍紹介ページで、SQLのテクニックに関するおすすめの書籍の紹介も行っておりますので、ご覧ください。

SQLのパフォーマンスに関するおすすめの書籍

当サイトの書籍紹介ページで、SQLのパフォーマンスに関するおすすめの書籍の紹介も行っておりますので、ご覧ください。

DB設計、SQLに関するおすすめの書籍

当サイトの書籍紹介ページで、DB設計、SQLに関するおすすめの書籍の紹介も行っておりますので、ご覧ください。