シェア

概要

このガイドでは、PostgreSQLデータベースからデータをエクスポートし、データをインポートする方法について説明します。このトピックの詳細については、公式のPostgreSQLドキュメントを参照してください。

pg_dumpを使用したデータエクスポート

pg_dumpは、PostgreSQLデータベースからデータをエクスポートするために使用できるネイティブPostgreSQLユーティリティです。このコマンドのすべてのオプションを表示するには、以下を実行します

pg_dump --help

PostgreSQLドキュメントより

このダンプメソッドの背後にある考え方は、SQLコマンドを含むファイルを生成し、それをサーバーにフィードバックすると、ダンプ時の状態と同じ状態でデータベースを再作成することです。PostgreSQLは、この目的のためにユーティリティプログラムpg_dumpを提供しています。pg_dumpは、通常のPostgreSQLクライアントアプリケーションです(ただし、特に巧妙なものです)。これは、データベースにアクセスできる任意のリモートホストからこのバックアップ手順を実行できることを意味します。ただし、pg_dumpは特別な権限では動作しないことを覚えておいてください。特に、バックアップするすべてのテーブルへの読み取りアクセス権が必要です。したがって、データベース全体をバックアップするには、ほとんどの場合、データベーススーパーユーザーとして実行する必要があります。

コマンドの基本的な構文は次のとおりです

pg_dump DB_NAME > OUTPUT_FILE

DB_NAMEおよびOUTPUT_FILEプレースホルダーを、それぞれの値に置き換える必要があります

  • データベース名
  • 目的の出力ファイルの名前(最高の相互運用性のために.sqlで終わる必要があります)

たとえば、ローカルPostgreSQLサーバー上のmydbという名前のデータベースからmydb.sqlという名前のファイルにデータをエクスポートするには、次のコマンドを使用できます

pg_dump mydb > mydb.sql

データベーススキーマがオブジェクト識別子型(OID)を使用している場合は、pg_dump--oids(短縮形:-o)オプション付きで実行する必要があります

pg_dump mydb --oids > mydb.sql

データベースの認証情報を提供する

PostgreSQLデータベースサーバーの場所を指定するには、次の引数を追加できます

引数デフォルト環境変数説明
--host(短縮形:-hlocalhostPGHOSTサーバーのホストマシンのアドレス
--port(短縮形:-p-5432PGPORT

PostgreSQLデータベースサーバーに対して認証するには、次の引数を使用できます

引数デフォルト環境変数説明
--username(短縮形:-U現在のオペレーティングシステムユーザー名PGUSERデータベースユーザーの名前。

たとえば、次の接続文字列を持つPostgreSQLデータベースからデータをエクスポートする場合

postgresql://opnmyfngbknppm:XXX@ec2-46-137-91-216.eu-west-1.compute.amazonaws.com:5432/d50rgmkqi2ipus

次のpg_dumpコマンドを使用できます

pg_dump --host ec2-46-137-91-216.eu-west-1.compute.amazonaws.com --port 5432 --user opnmyfngbknppm d50rgmkqi2ipus > backup.sql

このコマンドは、指定されたユーザーのパスワードを指定する必要があるプロンプトをトリガーすることに注意してください。

出力を制御する

データベース全体をダンプしたくない場合があります。たとえば、次のようなことをしたい場合があります

  • DDL(つまり、CREATE TABLEなどのデータベーススキーマを定義するSQLステートメント)を除外して、実際のデータのみをダンプする
  • 実際のデータを除外して、DDLのみをダンプする
  • 特定のPostgreSQLスキーマを除外する
  • 大きなファイルを除外する
  • 特定のテーブルを除外する

これらのシナリオで使用できるいくつかのコマンドラインオプションの概要を次に示します

引数デフォルト説明
--data-only(短縮形:-afalseすべてのDDLステートメントを除外し、データのみをエクスポートします。
--schema-only(短縮形:-sfalseデータを除外し、DDLステートメントのみをエクスポートします。
--blobs(短縮形:-b-schema--table、または--schema-onlyオプションが指定されていない場合はtrueバイナリラージオブジェクトを含めます。
--no-blobs(短縮形:-Bfalseバイナリラージオブジェクトを除外します。
--table(短縮形:-tデフォルトではすべてのテーブルが含まれますダンプするテーブルの名前を明示的に指定します。
--exclude-table(短縮形:-T-ダンプから特定のテーブルを除外します。

SQLファイルからデータをインポートする

SQL Dumpを使用してPostgreSQLデータベースをSQLファイルとしてエクスポートした後、SQLファイルをpsqlにフィードすることにより、データベースの状態を復元できます

psql DB_NAME < INPUT_FILE

DB_NAMEおよびINPUT_FILEプレースホルダーを、それぞれの値に置き換える必要があります

  • データベース名(その名前のデータベースは事前に作成されている必要があります!)
  • ターゲット入力ファイルの名前(おそらく.sqlで終わります)

データベースDB_NAMEを事前に作成するには、template0(サイトローカルの追加を含まないプレーンユーザーデータベースを作成します)を使用できます

CREATE DATABASE dbname TEMPLATE template0;

結論

PostgreSQLからデータをエクスポートし、再度取り込んでデータ構造を再作成し、データベースを移入することは、データを移行したり、バックアップと復旧を行ったり、レプリケーションの準備をしたりするのに適した方法です。pg_dumpツールとpsqlツールが連携してこのタスクを達成する方法を理解することは、データベースの境界を越えてデータを転送するのに役立ちます。

著者について
Justin Ellingwood

Justin Ellingwood

Justinは、2013年からデータベース、Linux、インフラストラクチャ、および開発者ツールについて執筆しています。現在、ベルリンに妻と2羽のウサギと住んでいます。彼は通常、三人称で書く必要はありません。これは関係者全員にとって安心です。