psql の \copy コマンドは、AnalyticDB for PostgreSQL インスタンスから直接ローカルコンピューター上のファイルへデータをエクスポートできます。この操作には SUPERUSER 権限を必要としません。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
実行中の AnalyticDB for PostgreSQL インスタンス
psql がインストールされ、ご利用のインスタンスへの接続が設定済みであること(「クライアント接続」をご参照ください)
Data Management (DMS) では\copyコマンドはサポートされていません。\copyを実行するには、psql を使用してください。
仕組み
\copy は、psql のメタコマンドであり、基盤となる SQL COPY コマンドを実行しますが、データの転送先をサーバーではなくクライアント側にルーティングします。つまり、指定されたファイルの読み取り/書き込みをサーバーが行うのではなく、psql がローカルファイルシステム上でその処理を行い、サーバーとローカルファイルシステム間でデータを中継します。このため、ファイルへのアクセスおよび権限はデータベースサーバーではなく、ローカルユーザーによって制御されます。したがって、SUPERUSER 権限は不要です。
`\copy` と `COPY` の違い:
\copy | COPY | |
|---|---|---|
| 実行場所 | psql クライアント | データベースサーバー |
| ファイルアクセス | ローカルファイルシステム(FILE、STDIN、STDOUT) | STDIN および STDOUT のみ |
| スーパーユーザー必須 | いいえ | 必要(FILE アクセス時) |
AnalyticDB for PostgreSQL では SUPERUSER 権限はサポートされていません。ローカルファイルへのデータエクスポートには \copy をご使用ください。構文
\COPY {table [(column [, ...])] | (query)} TO {'file' | STDOUT}
[ [WITH] [OIDS] [HEADER]
[DELIMITER [ AS ] 'delimiter']
[NULL [ AS ] 'null string']
[ESCAPE [ AS ] 'escape' | 'OFF']
[CSV [QUOTE [ AS ] 'quote']
[FORCE QUOTE column [, ...]] ]
[IGNORE EXTERNAL PARTITIONS ] ]ここで、WITH オプションの説明は以下のとおりです。
| オプション | 説明 |
|---|---|
OIDS | 各行の OID を含める |
HEADER | 列名を含むヘッダー行を出力(CSV 形式のみ) |
DELIMITER 'delimiter' | 列を区切る文字(例: , |
NULL 'null string' | NULL 値を表す文字列(例: \N |
ESCAPE 'escape' | CSV 出力時のエスケープ文字 |
CSV | CSV 形式を使用 |
QUOTE 'quote' | CSV 形式での引用符 |
FORCE QUOTE column | CSV 出力時に指定列を強制的に引用符で囲む |
IGNORE EXTERNAL PARTITIONS | エクスポート時に外部パーティションをスキップ |
構文の詳細については、PostgreSQL ドキュメントの「COPY」をご参照ください。
AnalyticDB for PostgreSQL では、JDBC 経由でCOPY文を実行することも可能です。CopyInメソッドは JDBC 内にカプセル化されています。詳細については、「Interface CopyIn」をご参照ください。
ローカルファイルへのデータエクスポート
psql を使用してご利用のインスタンスに接続し、\copy コマンドを実行して、テーブルまたはクエリ結果をローカルファイルに出力します。
テーブル全体をエクスポートする場合:
\COPY test1 TO '/path/to/localfile';CSV 形式およびカスタムデリミタを指定してエクスポートする場合:
\COPY test1 TO '/path/to/localfile.csv' WITH CSV DELIMITER ',';クエリ結果をエクスポートする場合:
\COPY (SELECT id, name FROM test1 WHERE status = 'active') TO '/path/to/output.csv' WITH CSV HEADER;以下のプレースホルダーを実際の値に置き換えてください。
| プレースホルダー | 説明 | 例 |
|---|---|---|
test1 | エクスポート対象のテーブル名 | orders |
/path/to/localfile | ローカルマシン上の出力ファイルの絶対パス | /home/user/export.csv |