今回は、Silverの「運用管理 - バックアップ方法(COPY文(SQL)、\copyコマンド(psql)の使い方)」からの出題です。
/path/to/filename はデータベースサーバ上のファイルなので、データベースプロセスを実行しているユーザ(典型的には postgres)にアクセス権限が必要である。
/path/to/filename はタブ区切りのテキストファイルである。
このコマンドを実行するには、データベースの管理者権限が必要である。
※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2022年4月6日
テーブルとファイルの間の入出力のために、PostgreSQLではCOPYというコマンドを用意しています(標準SQLのコマンドではなく、独自の拡張です)。
例えば、COPY テーブル名 FROM 'ファイル名' を実行すれば、指定したファイルの内容を読み取り、指定したテーブルにロードします。このコマンドはSQLとして実行できるだけでなく、psqlのメタコマンドとして \copy テーブル名 from 'ファイル名' の形式でも実行できます。
メタコマンドとして実行しても、内部的にはSQLのCOPYが実行されるので、機能も使用方法もよく似ていますが、重要な相違点として、ファイルの取り扱いがあります。
SQLはサーバ上で実行されるので指定するファイル名・パスもデータベースサーバ上のものとなり、データベースプロセスを実行するユーザにアクセス権限が必要です。ファイルのパス名も絶対パスで指定すべきです。また、サーバ上のファイルにアクセスするというセキュリティ上の理由で、コマンドの実行はスーパーユーザなど、特定の権限を有しているユーザに制限されています。一方で psql はクライアント・アプリケーションで、指定するファイルはクライアントマシン上のものになります。したがって、psql を実行しているユーザにアクセス権限があればよく、パス名も相対パスで問題ありません。実行するユーザにも使用するテーブルやファイルへのアクセス権限以外に特別な権限は必要ありません。
本問はメタコマンドの \copy に関するものですが、個々の選択肢について確認しましょう。
選択肢Aにある通り、このコマンドはファイル /path/to/filename の内容をテーブル tablex に追加するものです。
また、選択肢Bにある通り、ファイル入出力の簡便なインタフェースを提供するだけではなく、それを非常に高速に処理することを可能にしています。
選択肢Cは上で説明した通り、SQLのCOPYコマンドで実行する場合の話であって、psql の \copy メタコマンドの場合は事情が大きく異なります。
選択肢Dについて、COPYではタブ区切り、カンマ区切りのいずれも扱うことができますが、デフォルトではタブ区切りとして実行されます。
選択肢Eも上で説明した通り、管理者権限が必要なのはSQLのCOPYコマンドでファイル入出力する場合の話であって、psqlの \copy メタコマンドでは特別な権限は不要です。
したがって正解はA、B、Dです。
今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。
※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.