LPI-JapanLevel 3

難易度は Level 1(やさしめ)〜Level 5(難関) の5段階です。

OSS-DB Silverのサンプル問題(本番形式・解説付き)

OSS-DB Silver(LPI-Japan・OSS-DB Exam Silver(Ver.3.0・PostgreSQL))の出題形式を、実際の問題で確かめられます。ここに掲載する5問は、無料の会員登録で解ける模試 第1回(50問)の冒頭から抜粋したオリジナル問題です。当サイトは全700問を本番CBT準拠の形式で収録しており、この5問はそのごく一部にあたります。

設問1

次の文を順に実行しました。 ``` CREATE TABLE sales (id integer, amount integer); INSERT INTO sales VALUES (1, 100), (2, 200); CREATE MATERIALIZED VIEW msum AS SELECT count(*) AS n, sum(amount) AS total FROM sales; INSERT INTO sales VALUES (3, 300); SELECT * FROM msum; ``` 最後の SELECT の結果として適切なものはどれですか。

  • (3, 600)
  • まだ投入されていないというエラーになります
  • (0, NULL)
  • (2, 300)(正解)

解説

マテリアライズドビューは作成時点の結果を保存するので、その後の INSERT を反映せず (2, 300) を返します。(3, 600) は REFRESH 後の値で、空にもならず、エラーにもなりません。

他の選択肢が誤りである理由

  • 「(3, 600)」マテリアライズドビューは作成時点の結果を保存し、元のテーブルへの INSERT は反映されません。(3, 600) になるのは REFRESH した後です。
  • 「まだ投入されていないというエラーになります」WITH NO DATA を付けていないので作成時に結果が入り、エラーにはなりません。
  • 「(0, NULL)」作成時に結果が投入されているので空ではありません。空になるのは WITH NO DATA を付けた時です。

設問2

通常の VACUUM と VACUUM FULL の違いについて、正しいものはどれですか。

  • 通常の VACUUM は自動バキューム専用で、手動で実行できるのは VACUUM FULL だけです
  • VACUUM FULL は不要タプルの回収に加えて、インデックスの統計情報だけを更新します
  • 通常の VACUUM は 1 テーブルずつ、VACUUM FULL はデータベース内の全テーブルを対象にします
  • VACUUM FULL はテーブルを新しいファイルに書き直して空き領域を OS に返し、実行中は排他ロックを取ります(正解)

解説

VACUUM FULL はテーブルの中身を新しいファイルに書き出して置き換えるため、空き領域が OS に返りファイルが縮みます。その間はテーブルに ACCESS EXCLUSIVE ロックがかかり、SELECT も待たされます。統計情報の更新は ANALYZE の役目です。VACUUM FULL と通常の VACUUM はどちらも手動で実行でき、テーブル名を省略すればデータベース内のテーブル全体が対象になります。自動バキュームが行うのも通常の VACUUM です。

他の選択肢が誤りである理由

  • 「通常の VACUUM は自動バキューム専用で、手動で実行できるのは VACUUM FULL だけです」通常の VACUUM も手動で実行できます。自動バキュームが実行するのは通常の VACUUM と ANALYZE です。
  • 「VACUUM FULL は不要タプルの回収に加えて、インデックスの統計情報だけを更新します」統計情報の更新は ANALYZE の役目で、VACUUM FULL が行うのはテーブルの書き直しです。
  • 「通常の VACUUM は 1 テーブルずつ、VACUUM FULL はデータベース内の全テーブルを対象にします」どちらもテーブル名を指定すればそのテーブルだけ、省略すればデータベース内のテーブルが対象になります。

設問3

障害調査のため、停止中のクラスタに対して pg_controldata /var/lib/pgsql/data を実行しました。この出力に含まれる情報として正しい記述を選んでください。(2 つ選択)

  • postgresql.conf の全パラメータの現在値が一覧で分かる
  • 各テーブルの行数と最後に VACUUM された時刻が分かる
  • Database cluster state により、正常に停止したか稼働中のまま終わったかが分かる(正解)
  • 現在接続しているセッションの一覧と、それぞれが実行中の SQL と待っているロックが分かる
  • Latest checkpoint location などにより、最後のチェックポイントの位置と時刻が分かる(正解)

解説

pg_controldata はデータディレクトリの pg_control ファイルを読み、クラスタの状態や最後のチェックポイントの情報、ブロックサイズ、カタログ版などを表示します。セッションやパラメータの一覧、テーブルの統計はサーバに接続して pg_stat_activity や pg_settings、pg_stat_user_tables から取る情報です。

他の選択肢が誤りである理由

  • 「postgresql.conf の全パラメータの現在値が一覧で分かる」パラメータの現在値は pg_settings か SHOW で見る情報で、pg_controldata には出ません。
  • 「各テーブルの行数と最後に VACUUM された時刻が分かる」テーブルの行数や VACUUM の時刻は pg_stat_user_tables の情報です。
  • 「現在接続しているセッションの一覧と、それぞれが実行中の SQL と待っているロックが分かる」セッションの一覧はサーバに接続して pg_stat_activity を見る情報です。

設問4

ビューについて正しい説明はどれですか。

  • 元のテーブルと同じ構造の別テーブルで、データが自動で同期されます
  • 一時的な問い合わせ結果で、セッションが終わると自動で削除されます
  • 作成時の問い合わせ結果をコピーして保持し、元のテーブルが変わっても内容は変わりません
  • 問い合わせの定義に名前を付けたもので、参照するたびに元のテーブルから結果を作ります(正解)

解説

ビューは SELECT 文の定義に名前を付けたもので、データを持たず、参照のたびに元のテーブルから結果を作ります。結果をコピーして保持するのはマテリアライズドビューで、別テーブルでもなく、セッション限りでもありません。 別テーブルとしてデータが自動で同期されるわけではありません。

他の選択肢が誤りである理由

  • 「元のテーブルと同じ構造の別テーブルで、データが自動で同期されます」ビューは実体のデータを持ちません。定義された問い合わせを実行して結果を返すだけです。
  • 「一時的な問い合わせ結果で、セッションが終わると自動で削除されます」通常のビューはセッションが終わっても残ります。セッション限りなのは CREATE TEMP VIEW で作った一時ビューです。
  • 「作成時の問い合わせ結果をコピーして保持し、元のテーブルが変わっても内容は変わりません」結果を保持するのはマテリアライズドビューです。通常のビューは参照のたびに元のテーブルを読みます。

設問5

スキーマ sales に既にある 40 個のテーブルについて、ロール bi に SELECT をまとめて許可したいです。1 文で済ませる SQL はどれですか。

  • GRANT SELECT ON sales.* TO bi;
  • GRANT SELECT ON SCHEMA sales TO bi;
  • GRANT USAGE, SELECT ON ALL TABLES IN SCHEMA sales TO bi;
  • GRANT SELECT ON ALL TABLES IN SCHEMA sales TO bi;(正解)

解説

ALL TABLES IN SCHEMA を使うと、そのスキーマに実行時点で存在するテーブルとビューにまとめて権限を付与できます。スキーマに付与できる権限は USAGE と CREATE だけで SELECT は指定できず、sales.* という書き方もなく、テーブルに USAGE という権限はありません。

他の選択肢が誤りである理由

  • 「GRANT SELECT ON sales.* TO bi;」sales.* のようなワイルドカード指定は構文として用意されていません。
  • 「GRANT SELECT ON SCHEMA sales TO bi;」スキーマに付与できる権限は USAGE と CREATE で、SELECT を指定すると invalid privilege type のエラーになります。
  • 「GRANT USAGE, SELECT ON ALL TABLES IN SCHEMA sales TO bi;」テーブルに USAGE という権限はなく、invalid privilege type for table のエラーで文全体が失敗します。

続きは、会員登録なしでそのまま50問解けます。採点と解説つきで、上と同じ本物の問題です。

登録なしで50問解く