PREPARATION
受験対策

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

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

例題

3.65

ユーザfooが以下のコマンドを順次実行した。最後のSELECT文が返す結果として正しいものを1つ選びなさい。なお、各CREATE TABLEやINSERTはエラーにならず、正常に実行されたものとする。

CREATE TABLE public.sample(val TEXT);
INSERT INTO public.sample(val) VALUES(‘This is public’);
CREATE TABLE foo.sample(val TEXT);
INSERT INTO foo.sample(val) VALUES(‘This is foo’);
CREATE TABLE bar.sample(val TEXT);
INSERT INTO bar.sample(val) VALUES(‘This is bar’);
SET search_path TO “$user”,bar,public;
SELECT * from sample;

  1. This is foo, This is bar, This is public の3行が返される。

  2. This is bar, This is public の2行が返される。

  3. This is bar の1行だけが返される。

  4. This is foo の1行だけが返される。

  5. 上記のいずれでもない。

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

解答と解説

PostgreSQLではテーブルをはじめ、ほとんどのオブジェクトは何らかのスキーマに所属しています。オブジェクト名の前にスキーマ名とピリオドを付けて明示的にスキーマを指定することもできますが、スキーマ名を省略した場合は、スキーマ検索パスを利用してオブジェクトを検索し、そこで見つかったオブジェクトを参照します。

スキーマ検索パスは
SHOW search_path;
とすることで調べられますが、デフォルトでは”$user”,publicとなっており、ユーザ名と同じスキーマ名が最優先、次いでpublicという順になっています。search_pathは例題にあるように、SETを使って変更することができます。この例では、”$user”,bar,publicに設定しましたが、ユーザ名がfooなので、スキーマ検索パスはfoo,bar,publicとなります。

sampleという名前のテーブルは、foo, bar, public いずれのスキーマにもありますが、スキーマ名を省略した場合は、最も優先度の高いfooスキーマのテーブルが参照され、他のテーブルは参照されません。つまり、
SELECT * FROM foo.sample;
を実行したのと同じことになります。

従って、正解はDです。

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

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

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

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

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

サンプル問題/例題解説

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

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

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

無料技術解説セミナー

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

OSS-DB道場

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

LPI-Japan
Platinum Sponsors