PREPARATION
受験対策

Silverの例題解説「開発/SQL - SQLコマンド(スキーマ)」

今回は、Silverの「開発/SQL - SQLコマンド(スキーマ)」からの出題です。

例題

3.112

ユーザfooのスキーマ検索パスはデフォルトの “$user”, public に設定されている。
publicスキーマに bar というテーブルがあり、全ユーザ(public)に SELECTなどの権限がGRANTされている。
fooというスキーマが存在するが、テーブルは1つも存在しない。
このとき、以下の説明から正しいものをすべて選択しなさい。

  1. SELECT * FROM bar; は foo.bar というテーブルが見つからない、というエラーになる。
  2. CREATE TABLE bar(...); は public.bar というテーブルが既に存在するのでエラーになる。

    ここで、CREATE TABLE foo.bar(...); を実行し、foo.bar と public.bar の2つのテーブルが存在する状態にした。

  3. SELECT * FROM bar; とすると、foo.bar と public.bar の両方のテーブルから検索したデータが返される。
  4. DROP TABLE bar; を実行すると、foo.bar だけが削除される。
  5. DROP TABLE bar; を実行すると、public.bar だけが削除される。

※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2020年2月26日

解答と解説

データベースのスキーマとは階層のないディレクトリ構造のようなものです。ユーザ毎あるいはアプリケーション毎に別のスキーマを作成し、テーブル、ビュー、インデックスなどのオブジェクトをそれぞれのスキーマに格納するようにすれば、管理が容易になる、名前の競合が避けられる(同じ名前のオブジェクトを複数作成できる)などの利点があります。
デフォルトインストールではpublicスキーマだけが存在し、これは全ユーザがアクセス可能ですが、CREATE SCHEMA を実行することでスキーマを追加することができます。


SELECTなどのSQLでテーブル名などのオブジェクトを指定するとき、foo.bar などのようにスキーマ名とオブジェクト名をドットでつないで指定するのが正式ですが、スキーマ名は省略することが許されています。その場合にどのオブジェクトを指定したとみなされるかが問題になりますが、PostgreSQLではそれがスキーマ検索パスによって決められます。デフォルトでは $user つまりユーザ名と同じスキーマが最優先、2番目が public となっています。SELECTで指定したテーブルなど、既存のオブジェクトを特定するときは、最優先のスキーマにその名前のオブジェクトがあればそれを使用し、なければ2番目のスキーマにあるかどうかを調べる、という手順になります。CREATE TABLEなどオブジェクトを作成するSQLの場合は、最優先のスキーマが存在すればそのスキーマに作成、なければ2番目のスキーマに作成、という手順です。スキーマ検索パスで3つ以上のスキーマを指定することも可能で、この場合は、2番目のスキーマにも指定した名前のオブジェクトがない(あるいは2番目のスキーマが存在しない)ときには3番目のスキーマを使用します。


さて、例題の選択肢ですが、AのSELECT * FROM bar は、まず foo.bar というテーブルがあればそこからSELECT、なければ public.bar から SELECT という動作をします。この場合は、foo.bar がありませんので、public.bar からSELECTします。BのCREATE TABLE bar では、foo というスキーマが存在するので、foo.bar というテーブルを作成します。もし、foo というスキーマにオブジェクトを作成する権限がなかったら、これはエラーになりますが、public.bar というテーブルが存在するかどうかは関係がありません。
CのSELECT * FROM bar を実行するときは、foo.bar と public.bar の両方が存在しますが、最優先の foo.bar だけが対象になります。DとEのDROP table bar も最優先の foo.bar だけが対象になり、public.bar は削除されません。


従って、正解はDです。

今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。

※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。

企業の基幹システムや業務システムでの
OSS-DBの採用がますます拡大している中、
昇格・昇給・就職・転職に必ず役立つ認定資格になります

OSS-DBの受験対策について

受験の学習をサポートする情報や対策に役立つ情報をご紹介

サンプル問題/例題解説

例題 のアーカイブを試験ごとにまとめています。OSS-DB技術者認定試験の学習にお役立てください

学習教材・教育機関のご紹介

OSS-DB認定教材や教育機関について詳しくご説明いたします。

無料技術解説セミナー

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。

OSS-DB道場

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。

LPI-Japan
Platinum Sponsors