PostgreSQL / データの挿入と変更
PostgreSQLでのデータのインポートとエクスポート
概要
このガイドでは、PostgreSQLデータベースからデータをエクスポートし、データをインポートする方法について説明します。このトピックの詳細については、公式のPostgreSQLドキュメントを参照してください。
pg_dump
を使用したデータエクスポート
pg_dump
は、PostgreSQLデータベースからデータをエクスポートするために使用できるネイティブPostgreSQLユーティリティです。このコマンドのすべてのオプションを表示するには、以下を実行します
pg_dump --help
このダンプメソッドの背後にある考え方は、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 (短縮形:-h ) | localhost | PGHOST | サーバーのホストマシンのアドレス |
--port (短縮形:-p ) | - | 5432 | PGPORT |
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_NAME
およびINPUT_FILE
プレースホルダーを、それぞれの値に置き換える必要があります
- データベース名(その名前のデータベースは事前に作成されている必要があります!)
- ターゲット入力ファイルの名前(おそらく
.sql
で終わります)
データベースDB_NAME
を事前に作成するには、template0
(サイトローカルの追加を含まないプレーンユーザーデータベースを作成します)を使用できます
CREATE DATABASE dbname TEMPLATE template0;
結論
PostgreSQLからデータをエクスポートし、再度取り込んでデータ構造を再作成し、データベースを移入することは、データを移行したり、バックアップと復旧を行ったり、レプリケーションの準備をしたりするのに適した方法です。pg_dump
ツールとpsql
ツールが連携してこのタスクを達成する方法を理解することは、データベースの境界を越えてデータを転送するのに役立ちます。