共有

概要

このガイドでは、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_NAMEOUTPUT_FILEのプレースホルダーを、それぞれの値に置き換える必要があります。

  • あなたのデータベース名
  • 希望する出力ファイルの名前(最高の相互運用性のために.sqlで終わるべきです)

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

pg_dump mydb > mydb.sql

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

pg_dump mydb --oids > mydb.sql

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

PostgreSQLデータベースサーバーの場所を指定するために、以下の引数を追加できます。

引数デフォルト環境変数説明
--host (短縮形: -h)localhostPGHOSTサーバーのホストマシンのアドレス
--port (短縮形: -p)-PGPORTPostgreSQLサーバーがリッスンしているサーバーのホストマシンのポート

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 (短縮形: -a)false任意のDDLステートメントを除外し、データのみをエクスポートします。
--schema-only (短縮形: -s)falseデータを除外し、DDLステートメントのみをエクスポートします。
--blobs (短縮形: -b)-schema--table、または--schema-onlyオプションが指定されていない限りtrueバイナリラージオブジェクトを含めます。
--no-blobs (短縮形: -B)falseバイナリラージオブジェクトを除外します。
--table (短縮形: -t)デフォルトですべてのテーブルを含みますダンプするテーブルの名前を明示的に指定します。
--exclude-table (短縮形: -T)-ダンプから特定のテーブルを除外します。

SQLファイルからのデータインポート

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

psql DB_NAME < INPUT_FILE

DB_NAMEINPUT_FILEのプレースホルダーを、それぞれの値に置き換える必要があります。

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

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

CREATE DATABASE dbname TEMPLATE template0;

結論

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

著者について
Justin Ellingwood

Justin Ellingwood

ジャスティンは2013年からデータベース、Linux、インフラ、開発者ツールについて執筆しています。現在は妻と2匹のウサギと共にベルリンに住んでいます。彼は通常、三人称で書く必要がないため、関係者全員にとって安心です。
© . All rights reserved.