今回は、Silverの「S2 運用管理 - S2.4 バックアップ方法」からの出題です。
SELECT 文の INTO 句で出力先ファイルを指定することにより、テーブルの内容を CSV 形式で出力することができる。
psql でデータベースに接続し、\copy メタコマンドを使うことにより、テーブルの内容を CSV 形式で出力することができる。
LOAD DATA 文により、CSV ファイルを読み込んで、PostgreSQL のテーブルに データをアップロードすることができる。
COPY 文により、CSV ファイルを読み込んで、PostgreSQL のテーブルにデータをアップロードすることができる。
pg_loader という、CSV ファイルを読み込むための専用のコマンドがある。
※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2011年11月15日
正解はBとDです。
テーブル単位で CSV 形式などのテキストファイルを入出力する機能は比較的重要度が高いですが、その方法は標準化されておらず、データベースの種類によって様々です。
PostgreSQL では、入出力とも、2つの方法があります。
一つは psql でデータベースに接続し、\copy メタコマンドを使う方法です。
\copy table_name to file_name [options]
とすることで、テーブル table_name の内容をファイル file_name に出力できます。
デフォルトではタブ区切りのテキスト形式の出力となりますが、オプションでcsv を指定するとカンマ区切りの CSV 形式になります。
同じように psql でデータベースに接続し、
\copy table_name from file_name [options]
とすることで、CSV 形式などのテキストファイル file_name を読み込み、テーブル table_name にアップロードすることができます。
もう一つは、COPY 文を使う方法で、データベースに接続し、
COPY table_name TO 'file_name' [options];
COPY table_name FROM 'file_name' [options];
とすることで、それぞれ出力、入力が実行できます。
COPY 文ではファイル名をシングルクォート(')で括る必要がある他、コマンドの形式やオプションにも \copy メタコマンドとは若干の違いがありますが、注意すべきはそれだけではありません。
\copy メタコマンドと COPY 文の最大の違いは、前者が psql ツールのメタコマンドとしてクライアント上で実行されるのに対し、後者は SQL としてサーバ上で実行されることです。
つまり、入出力の対象となるファイルは、\copy メタコマンドの場合はクライアントマシン上にあるのに対し、COPY 文の場合はサーバ上にあります。
COPY 文はサーバ上のファイルを読み書きするため、データベースの管理者ユーザでしか実行できないという制限があり、またファイル名は絶対パスで指定する必要があります。
一方で、\copy メタコマンドはネットワークを介して入出力データのやり取りをするのに対し、COPY 文ではサーバ内でファイルの入出力を行いますから、データサイズが大きい場合は、COPY 文の方がパフォーマンス的に有利となります。
この他、psql の出力先をリダイレクトすることで CSV などのテキスト形式のファイル出力を得るという方法もあります。この場合、SELECT 文の出力時の列の区切り文字などを変更する必要があります。
\copy メタコマンド、COPY 文、いずれも PostgreSQL 独自の方法であり、他のRDBMS ではこれとは異なる方法で CSV ファイルの入出力を行います。
例えば、MySQL では、SELECT 文の INTO 句で出力先ファイル名を指定することで、CSV などのテキスト形式でファイルを出力し、LOAD DATA 文により、CSV などのテキストファイルを読み込むことができます。
PostgreSQL でも SELECT 文に INTO 句がありますが、これはファイル出力ではなく、CREATE TABLE AS と同等の、新しいテーブルを作成する機能なので注意してください。
今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。
※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.