先日、OSS-DB Exam Silver試験を受けてきました。
この試験はPostgreSQLに関する知識を問う試験で、出題内容はオープンデータベースやSQLコマンドに関する知識が半分と、インストール方法、設定ファイル、バックアップ方法などの知識が半分出題されます。
問題数は50問の選択式で、100点満点中64点以上で合格となります。(ちなみに94点で合格できました。)
試験勉強の詰め込み学習といえば、ひたすら問題を解く!暗記!ですが、私は暗記があまり得意ではなく、すぐに頭が疲れてしまいます。
そこで今回は実際にPostgreSQLを触ってみて「丸暗記」ではなく「理解して覚える」ことを意識しました。
特にSQL文は比較的イメージしやすいですが、インストール方法や設定ファイル操作は普段触れる機会が少ない部分です。
この記事では、そういった部分を理解して覚えるために私が試してみた操作方法を紹介します。
Dockerを使ってPostgreSQLをインストール
Windowsに直接インストールしてもよかったのですが、
- コマンドライン中心で操作したかった
- 勉強用なので不要になったら削除しやすい
- すでにDocker環境を入れていた
という理由から、Dockerを使って環境を用意しました。
PowerShellで以下を実行します。
1 |
$ docker run --name my-postgres -e POSTGRES_PASSWORD=pass -d -p 5432:5432 postgres:16 |
Dockerの場合、コンテナ起動と同時にPostgreSQLも立ち上がります。
(initdb + pg_ctl startが実行されるイメージです。)
コンテナに入ります。
1 |
$ docker exec -it my-postgres bash |
インストールされたものを見てみる
環境変数を確認します。
1 2 |
# echo $PGDATA /var/lib/postgres/data |
ディレクトリの中身を見てみます。
1 |
# ls -l $PGDATA |
出力例:
1 2 3 4 5 6 7 8 |
total 128 drwx------ 5 postgres postgres 4096 Aug 28 14:00 base drwx------ 2 postgres postgres 4096 Aug 28 14:00 global drwx------ 2 postgres postgres 4096 Aug 28 14:00 pg_commit_ts -rw------- 1 postgres postgres 2241 Aug 28 14:00 pg_hba.conf -rw------- 1 postgres postgres 1636 Aug 28 14:00 postgresql.conf drwx------ 2 postgres postgres 4096 Aug 28 14:00 pg_wal ...(省略)... |
- base … デフォルトではこのフォルダの中にテーブルのデータが格納されます。
- pg_hba.conf … 接続認証に関する設定を行います。
- postgresql.conf … ログ出力やバキュームなどの動作設定を行います。
pg_hba.confの認証方式については試験で頻出です。また、postgres.confはログの出力方法についてのパラメータの意味や、そのパラメータの反映方法(再起動で反映されるのか、ファイルの読み込みで反映されるのか)もよく問われます。
実際に cat で中身を確認すると、かなり行数があるのですが、試験に出る重要な部分だけ確認したら大丈夫です。
もうひとつクラスタを作成してみる
PostgreSQLでは、ひとつのOSに対して複数のデータベースクラスタを作成することが可能です。
これは「ひとつのOSに対して複数のクラスタは作成できない」といった誤った選択肢が頻出するポイントでもあります。
別のディレクトリにクラスタを作成してみます。
1 2 3 4 |
# mkdir /tmp/mycluster # chown postgres:postgres /tmp/mycluster # su - postgres $ /usr/lib/postgresql/16/bin/initdb -D /tmp/mycluster --username=myuser --encoding=UTF8 --locale=C |
ls -l /tmp/mycluster
を実行すると、先ほどと同様に postgresql.conf や pg_hba.conf などが作成されているのが確認できます。
実際に手を動かして新しいクラスタを作ることで、知識が定着しやすくなります。
起動確認 & データベース一覧を表示する
まずクラスタの状態を確認します。
1 |
$ pg_ctl status |
ここではディレクトリを指定していないので環境変数$PGDATAが使用されます。
=最初に作成したクラスタの状態が表示されます。
出力例:
1 2 |
pg_ctl: server is running (PID: 123) /usr/lib/postgresql/16/bin/postgres "-D" "/var/lib/postgresql/data" |
ログインをしてデータベース一覧を確認します。
1 2 |
$ psql -U postgres # \l |
出力例:
1 2 3 4 5 6 7 8 9 |
List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+------------+------------+----------------------- postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 | template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres (3 rows) |
最初から3つのデータベース(postgres、template0、template1)用意されていることがわかります。
この3つの存在は必ず覚えておくべき頻出ポイントで、特に template0 / template1 の役割はよく問われます。
また、\lなどのメタコマンドは試験でよく出題されます。実際にコマンドを叩いて確認しておくと安心です。
information_schemaやpg_catalogの存在を確認
スキーマ一覧の表示
1 |
# \dn |
出力例:
1 2 3 4 5 6 7 |
List of schemas Name | Owner ------------------+---------- information_schema | postgres pg_catalog | postgres public | postgres (3 rows) |
ここで出てくる information_schema と pg_catalog は、それぞれ情報スキーマとシステムカタログとして役割を持っており、頻出分野です。
「どのように参照できるか」を問われることもあるので、SELECT * FROM information_schema.tables;
などを試して実際にデータを見ておくと理解が深まります。
ロールを作成してみる
ユーザーや権限についても手を動かしてみます。
1 2 |
# CREATE ROLE user1 LOGIN PASSWORD 'pass123'; # GRANT CONNECT ON DATABASE postgres TO user1; |
ロールの作成や権限変更も 試験でよく出題されるテーマ です。
ここまで実際に操作してみると、単なる暗記よりも記憶に残りやすくなります。
まとめ
実際に手を動かしながら学んだことで、ただ問題を解くだけよりも理解が深まりました。
その後は問題集を解いて知識を整理し、だいたい2〜3週間の勉強で合格できました。
OSS-DB Silverの試験はSQL文についての問題も多く出題されます。
ちょうど実務でクエリ改善やインデックス、ANALYZEなどを調べていたので役立つ部分が多かったと感じます。
これからPostgreSQLを学びたい方や、OSS-DB Silverに挑戦しようと思っている方に、少しでも参考になればうれしいです!
最後まで閲覧いただきありがとうございます。
エコモットでは一緒にモノづくりをしていく仲間を随時募集しています。
弊社に少しでも興味がある方はぜひ下記の採用ページをご覧ください!