すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:COPY コマンドを実行してデータをインポートまたはエクスポートする

最終更新日:Jun 20, 2025

COPY コマンドを実行して、TXT や CSV などの形式のファイルを PostgreSQL データベースにインポートしたり、PostgreSQL データベースから指定された CSV ファイルにデータをエクスポートしたりできます。このトピックでは、COPY コマンドを実行して ApsaraDB RDS for PostgreSQL インスタンスにデータをインポートする方法と、ApsaraDB RDS for PostgreSQL インスタンスからデータをエクスポートする方法について説明します。

データをインポートする

非対話型インポート

コマンド

cat $dataFile | psql $dbName -h $host -p $port -U $userName -c "COPY $tableName from stdin with ( DELIMITER '|');" // $dataFile の内容を stdin にパイプし、psql を使用して $dbName データベースの $tableName テーブルにデータをインポートします。各行の列は '|' 文字で区切られます。

パラメーター

  • COPY コマンドは、$dataFile ファイルから $dbName データベースの $tableName テーブルにデータをインポートします。$dataFile ファイルでは、各行の列は | 文字で区切られ、列の順序は $tableName テーブルのスキーマと一致しています。

  • $host$port$userName は、それぞれ RDS for PostgreSQL インスタンスへの接続に使用するエンドポイント、ポート番号、ユーザー名を示します。詳細については、「エンドポイントとポート番号の表示と変更」をご参照ください。

  • RDS for PostgreSQL では、PostgreSQL プロセスがデプロイされているサーバーにユーザーが直接ログインすることは許可されておらず、サーバー上のファイルの読み取りまたは書き込み権限も付与されていません。そのため、RDS for PostgreSQL インスタンスにファイルをインポートするには、まず cat コマンドを実行してファイルデータを標準出力(stdout)に出力し、パイプを介して stdoutpsql コマンドの標準入力(stdin)として渡す必要があります。このようにして、COPY コマンドは stdin からデータベーステーブルにデータをインポートできます。

詳細については、「COPY」をご参照ください。

次の例は、CentOS 7.9 環境から RDS for PostgreSQL インスタンスにファイルのデータをインポートする方法を示しています。

  1. インポートするデータを /tmp/test_data.txt ファイルに保存します。

  2. 次のコマンドを実行して、インポートする TXT ファイルの内容を表示します。

    cat /tmp/test_data.txt

    出力例:

    John|1
    Smith|2
    Tom|3
    Jerry|4
  3. (オプション) RDS for PostgreSQL インスタンスのデータベースアカウントのパスワードを環境変数として設定します。次のコマンドのサンプルパスワード testpwd を実際のパスワードに置き換えます。

    export PGPASSWORD='testpwd'
    説明

    環境変数として渡す代わりに、インポートコマンドに直接入力してパスワードを指定することもできます。

  4. 次のコマンドを実行して、/tmp/test_data.txt ファイルから RDS for PostgreSQL インスタンスの testtable という名前のテストテーブルにデータをインポートします。

    cat /tmp/test_data.txt | psql testdb -h pgm-bp1131jrd8lr****.pg.rds.aliyuncs.com -p 5432 -U testdbuser -c "COPY testtable from stdin with ( DELIMITER '|');"

    COPY 4 のようなメッセージが返された場合、データはインポートされています。

  5. RDS for PostgreSQL インスタンスに接続するを実行し、SELECT 文を実行して、インポートされたデータをテストテーブル testtable に表示します。

    出力例:

       name   | id 
    ----------+----
     John     | 1
     Smith    | 2
     Tom      | 3
     Jerry    | 4
    (4 rows)

対話型インポート

コマンド

\COPY $tableName from '$dataFile' with ( delimiter '|' ); // psql を使用して $dataFile から $tableName テーブルにデータをインポートします。各行の列は '|' 文字で区切られます。
説明

このコマンドを実行する前に、RDS for PostgreSQL インスタンスにログインする必要があります。

パラメーター

\COPY コマンドは、$dataFile ファイルから RDS for PostgreSQL インスタンスの $tableName テーブルにデータをインポートします。$dataFile ファイルでは、各行の列は | 文字で区切られ、列の順序は $tableName テーブルのスキーマと一致しています。

詳細については、「psql」をご参照ください。

次の例は、CentOS 7.9 環境から RDS for PostgreSQL インスタンスにファイルのデータをインポートする方法を示しています。

  1. インポートするデータを /tmp/test_data.txt ファイルに保存します。

  2. 次のコマンドを実行して、インポートする TXT ファイルの内容を表示します。

    cat /tmp/test_data.txt

    出力例:

    John|1
    Smith|2
    Tom|3
    Jerry|4
  3. (オプション) RDS for PostgreSQL インスタンスのデータベースアカウントのパスワードを環境変数として設定します。次のコマンドのサンプルパスワード testpwd を実際のパスワードに置き換えます。

    export PGPASSWORD='testpwd'
    説明

    RDS for PostgreSQL インスタンスに接続するときに、パスワードを手動で入力することもできます。

  4. 次のコマンドを実行して、RDS for PostgreSQL インスタンスの testdb データベースに接続します。コマンドの接続情報を実際の値に置き換えます。詳細については、「エンドポイントとポート番号の表示と変更」をご参照ください。

    psql -h pgm-bp1131jrd8lr****.pg.rds.aliyuncs.com -p 5432 -U testdbuser -d testdb
  5. 次の \COPY コマンドを実行して、/tmp/test_data.txt ファイルから testdb データベースの testtable という名前のテストテーブルにデータをインポートします。

    \COPY testtable FROM '/tmp/test_data.txt' WITH ( delimiter '|' );

    COPY 4 のようなメッセージが返された場合、データはインポートされています。

  6. SELECT 文を実行して、インポートされたデータをテストテーブル testtable に表示します。

    出力例:

       name   | id 
    ----------+----
     John     | 1
     Smith    | 2
     Tom      | 3
     Jerry    | 4
    (4 rows)

データをエクスポートする

非対話型エクスポート

コマンド

psql $dbName -h $host -p $port -U $userName -c "COPY (SELECT * from $tableName) TO STDOUT with CSV HEADER" -o "$dataFile" // $dbName データベースの $tableName テーブルからデータをエクスポートし、CSV 形式で $dataFile に保存します。

パラメーター

  • COPY コマンドは、$dbName データベースの $tableName テーブルのデータを CSV 形式で $dataFile ファイルにエクスポートします。

  • $host$port$userName は、それぞれ RDS for PostgreSQL インスタンスへの接続に使用するエンドポイント、ポート番号、ユーザー名を示します。詳細については、「エンドポイントとポート番号の表示と変更」をご参照ください。

  • RDS for PostgreSQL では、PostgreSQL プロセスがデプロイされているサーバーにユーザーが直接ログインすることは許可されておらず、サーバー上のファイルの読み取りまたは書き込み権限も付与されていません。そのため、テーブルのデータを CSV ファイルにエクスポートするには、まず COPY コマンドを実行してデータを標準出力(stdout)に出力し、psql コマンドの -o パラメーターを指定して stdout から $dataFile ファイルにデータをエクスポートする必要があります。

次の例は、テストテーブル testtableデータをインポートする セクションで説明)のデータを CentOS 7.9 環境にエクスポートする方法を示しています。

  1. (オプション) RDS for PostgreSQL インスタンスのデータベースアカウントのパスワードを環境変数として設定します。次のコマンドのサンプルパスワード testpwd を実際のパスワードに置き換えます。

    export PGPASSWORD='testpwd'
    説明

    環境変数として渡す代わりに、エクスポートコマンドに直接入力してパスワードを指定することもできます。

  2. 次のコマンドを実行して、テストテーブル testtable から /tmp/test_outdata ファイルにデータをエクスポートします。

    psql testdb -h pgm-bp1131jrd8lr****.pg.rds.aliyuncs.com -p 5432 -U testdbuser -c "COPY (SELECT * from testtable) TO STDOUT with CSV HEADER" -o "/tmp/test_outdata"
  3. 次のコマンドを実行して、エクスポートされた CSV ファイルの内容を表示します。

    cat /tmp/test_outdata

    出力例:

    name,id
    John,1
    Smith,2
    Tom,3
    Jerry,4

対話型エクスポート

コマンド

\COPY $tableName TO '$dataFile' WITH csv header; // psql を使用して $tableName テーブルからデータをエクスポートし、CSV 形式で $dataFile に保存します。
説明

このコマンドを実行する前に、RDS for PostgreSQL インスタンスにログインする必要があります。

パラメーター

\COPY コマンドは、RDS for PostgreSQL インスタンスの $tableName テーブルのデータを CSV 形式で $dataFile ファイルにエクスポートします。

次の例は、テストテーブル testtableデータをインポートする セクションで説明)のデータを CentOS 7.9 環境にエクスポートする方法を示しています。

  1. (オプション) RDS for PostgreSQL インスタンスのデータベースアカウントのパスワードを環境変数として設定します。次のコマンドのサンプルパスワード testpwd を実際のパスワードに置き換えます。

    export PGPASSWORD='testpwd'
    説明

    RDS for PostgreSQL インスタンスに接続するときに、パスワードを手動で入力することもできます。

  2. 次のコマンドを実行して、RDS for PostgreSQL インスタンスの testdb データベースに接続します。コマンドの接続情報を実際の値に置き換えます。詳細については、「エンドポイントとポート番号の表示と変更」をご参照ください。

    psql -h pgm-bp1131jrd8lr****.pg.rds.aliyuncs.com -p 5432 -U testdbuser -d testdb
  3. 次のコマンドを実行して、テストテーブル testtable から /tmp/test_outdata ファイルにデータをエクスポートします。

    \COPY testtable TO '/tmp/test_outdata' WITH csv header;

    COPY 4 のようなメッセージが返された場合、データはエクスポートされています。

  4. 次のコマンドを実行して、testdb データベースから切断します。

    exit
  5. 次のコマンドを実行して、エクスポートされた CSV ファイルの内容を表示します。

    cat /tmp/test_outdata

    出力例:

    name,id
    John,1
    Smith,2
    Tom,3
    Jerry,4