難易度は 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問解く