前提
●プログラミング初心者(事務職)
●情報系の資格取得は今回が初
●学習開始前の状況(2020年11月時点のQiita)
PostgreSQLの知識:皆無
SQL:『スッキリわかるSQL入門第2版』で基本を学習済。が、自由に操れるレベルではない。
環境構築:未経験
(「Linux環境ってどういう環境?Windowsとどう違うの?」「CUIってどうやって動かすの?」「“$”や“#”って自分で打つの?最初から表示されるの?」というレベル)
詳細折り畳み
1)YouTube(HTML・CSS)と書籍でHTML・CSSを少しかじった。
2)3ヶ月半かけてExcel、データベース、SQL、Accessの基本を勉強した。
使用した教材は
①『30時間でマスター Excel2019』
②『マンガでわかるデータベース』(オーム社)
③『スッキリわかるSQL入門第2版ドリル222問付き!』』(インプレス)
④『できるAccess2019』(インプレス)
3)実践として、Excelピボットを家計簿、Accessを年賀状の宛名印刷に使い、自分なりに触ってみた。
・SQLについてはテキストを一通りさらっただけ。どう実践したら良いのかがわかっていない。
(『スッキリ~』の実行環境(dokoQL)上であれば、テキストを見ながらSQLの基本操作ができる。)
・Access以外のDBMSには触れたことが無い。
【取得を決めた理由】
データ分析に興味を持って、まずは基礎から固めようとExcelの基本から勉強していたところ、
プログラマの方から
「まずはデータベースを学ぶと良いよ」というアドバイスとロードマップをいただいたので。
(ロードマップ :DBとSQLの基本 → Access → OSS-DB Silver取得)
使用教材
●OSS教科書 OSS-DB Silver Ver2.0対応(通称緑本)
●徹底攻略OSS-DB Silver問題集[Ver.2.0]対応(通称黒本)
●オープンソースデータベース標準教科書 -PostgreSQL-(Ver.2.0.0)Kindle版
●Ping-t 最強WEB問題集OSS-DB Silver(Ver2.0)
+α(ドキュメント、LPI-JapanのYouTube、LPI-JapanのHP、等)
学習の流れ
所要期間:1年半 2020年12月~2022年6月
(環境構築・コマンドの扱い方等 基本の学習:11ヶ月 → 黒本で演習:4ヶ月 → Ping-tで演習:3ヶ月弱)
●2020年12月3日 学習開始
●2020年12月~2021年9月 緑本。環境構築でつまずく
自分用メモ
緑本3章(インストール)に記載されていた、"ソースコードからPostgreSQLをインストールする方法"でWindows10に環境構築しようと試みる
・OSS-DB Silver学習のためにパッケージ版PostgreSQLをインストールしたけれど、結局アンインストールした話(2020/12/08)
・OSS-DB Silverのための環境構築 #1/5_VirtualBox/VagrantでLinux環境(CentOS7 仮想環境)をつくる(2020/12/22)
↓
挫折(2020年12月)
↓
Windows10上にLinux環境を構築し、そこにPostgreSQLをソースコードからインストールしようと試みる
作業1 : VirtualBoxをインストールして、PCに仮想環境を構築
作業2 : Vagrantをインストールして、VirtualBoxをCUIで操作できるようにする
作業3 : Vagrant上にCentOSをインストールして、Linux環境をつくる
・OSS-DB Silverのための環境構築 #2/5_事前準備1-CentOS7上にPostgreSQLを操作するユーザーアカウントを作成(2021/01/09)
・OSS-DB Silverのための環境構築 #3/5_事前準備2-ソフトウェアパッケージ6つをインストールする(2021/01/19)
・OSS-DB Silverのための環境構築 #4/5_行き詰まって環境をリセット(Vagrant/VirtualBox(≒CentOS7)をアンインストール)(2021/01/29)
↓
挫折(2021年1月)
↓
Linux(Ubuntu)環境を構築しようと試みる(VagrantでVirtualBoxにUbuntuを導入)
・OSS-DB Silverのための環境構築 #5/5_最初からやり直し!VirtualBoxにUbuntu環境を構築しようとしたけど結局DBeaverを使うことにした(2021/01/31)
↓
挫折(2021年1月)
↓
Linux環境構築を一旦諦め、pgAdmin上でElephantSQLを操作できるよう設定(2月)
(ホストを汚さない方が良いからPostgreSQLではなく、一旦ElaphantSQLを使おうとアドバイスいただいたので)
(ElephantSQLは、クラウドでPostgreSQLを使えるサービス。クラウド上のサーバーPCにElephantSQLの運営がインストール、設定してくれて直ぐに手軽に使えるモノ。なので自分自身のpcや自分が用意したクラウドサーバーにインストール・設定が不要。)
↓
pgAdminよりわかりやすいと紹介いただき「DBeaver」を導入(2月)
(「自分のPCにインストールしたDBeaver」から「クラウド上にあるDB=エレファント」にアクセスし、DBeaverでエレファントを操作する!)
・DBeaverでElephantSQLを使う ~PostgreSQLとElephantSQLの違い~(2021/02/12)
・DBeaverでElephantSQLに接続(2021/02/16)
・DBeaverでElephantSQL(PostgreSQL)を操作してみる(2021/02/18)
・OSS-DB Silverの勉強メモ(2021/02/19~)
↓
DBeaver>ElephantSQLの環境で 問題集(黒本)のSQLの章 を1周(2月)
↓
問題集(黒本)の模擬試験やってみた 正答18問/50問(2021年3月)
『スッキリ~』をElephantSQLで実行しつつ巻末ドリル含めて復習
・【DBeaver】PostgreSQLへの再接続でエラーが出たので対処。「接続試行がタイムアウトしました」→Vagrant(CentOS7)とDockerを起動し忘れていたので起動(2021/03/30)
↓
Linux環境でPostgreSQLを起動&DBeaverから操作 に再挑戦→成功!
◆構築した環境◆
ホストPC:Windows10、GUI DBツール:DBeaver、仮想化ソフト:VirtualBox、ゲストPC:Vagrant(=CentOS7=仮想マシン)、コンテナ型仮想環境:Docker、CUI DBクライアント:PostgreSQL
・PostgreSQL実習環境の準備_『OSS-DB標準教科書』1(2021/04/09)
↓
『オープンソースデータベース標準教科書 -PostgreSQL-(Ver.2.0.0)Kindle版』(4月~6月)
・【DBeaver】作ったデータベースが消えてしまった!(2021/05/24)
・DBeaverでCREATE文を実行してもテーブルが作れない_『OSS-DB標準教科書』2-SQLによるDBの操作 基礎(2021/05/31)
・csvファイルをデータベースに取り込む方法_試行錯誤1(未解決)エクセルで大量のINSERT文を作って文字化け問題解決を試みる『OSS-DB標準教科書』3(https://qiita.com/ume-san/items/f10686fd76f2e1c50121)(2021/06/07)
環境回りがごちゃごちゃしすぎたのでKさんにアドバイスいただき
Vagrantを廃止してシンプルなWSL2(Ubuntu)に統一。
WSL2でのpostgresの方が圧倒的に外部ファイルを扱いやすいとのこと。
(Vagrant使ってる人がWSLに乗り換えて情報が少なくなってきてる by Kさん)
・csvファイルをデータベースに取り込む方法_試行錯誤2(未解決)_『OSS-DB標準教科書』4(2021/06/15)
・csvファイルをデータベースに取り込む方法_試行錯誤3(未解決)WinSCPを使ってcsvファイルをVagrantにアップ『OSS-DB標準教科書』5(2021/06/27)
Kさんのガイドラインを元に
WSLにUbuntuをインストール→postgresをインストール→ubuntuユーザー・postgresユーザーを追加→Dbverから接続→VSCから接続→VSCからcsvをubuntuにアップロード。
(WSLでやりなおす時にVagrantで曖昧にしていた情報の位置関係を一つずつ手書きしていく事。曖昧な事を明確にする一歩目なので、手を抜くとまた同じミスサイクルになる。by Kさん)
★・DBeaverからWSL2(Ubuntu)にリモート接続したいけど接続情報の設定がうまくいかない。→解決!(2021/08/10)
listen_addresses を '*'に設定する方法がわからず苦戦。Bさんのアドバイスでテキストエディタviの存在を知る。
・設定ファイル(postgresql.conf)の内容が消えてしまった(全行"~"になった)→ディレクトリに注意!(2021/08/31)
postgresql.confファイルの中身を丸ごと書き換えてしまうというミスをする→Bさんに「元々設定しようとしたpostgresql.confを開けていない状態。左下にnew fileと書かれている」というアドバイスをもらい解決できた。
・設定ファイル(pg_hba.conf)の内容が消えてしまった(全行"~"になった)→「SUDO_EDITOR=vi sudoedit -u postgres /etc/postgresql/12/main/pg_hba.conf」で開けた。(2021/09/04)
・【WSL2,CSV】CSV文字化け対応→WSL2上にインポート(2021/09/11)
・【WSL2,CSV】WSL2上のCSVをDB(postgres)にインサートする(2021/09/13)
・設定ファイル編集時はバックアップを取ろう!方法をまとめた。(2021/09/20)
↓
Kさん&Bさんにアドバイスいただきつつ、何とか環境構築 完了。
●2021年6~10月(環境構築と同時進行) 緑本よりも易しいPostgreSQLの本に取り組む
『オープンソースデータベース標準教科書 -PostgreSQL-(Ver.2.0.0)Kindle版』(第10章(Webアプリケーションとの連携)以外) 構築した環境を使って学習
自分用メモ
●2021年11月~2022年1月 黒本
『徹底攻略OSSDB-Silver問題集(黒本)』1周目完了
●2022年1~3月 黒本
『徹底攻略OSSDB-Silver問題集(黒本)』復習
・トランザクションの挙動を確かめるために、1台のPC上に2つのセッションを用意したい(2022/01/23)
・PostgreSQLのトランザクションの分離レベル4つを試す(2022/02/03)
・【PostgreSQL】参照整合性を維持するテーブルについて、CASCADEオプションを指定せずに被参照テーブルを削除したら、どうなる?(2022/02/04)
・【OSS-DB Silver】問題集(黒本)には出てくるけれど教科書(緑本)には出てこない事項(2022/02/09)
・【PostgreSQL】変数への値の代入を禁止する「CONSTANT」と、変数へ値を代入する「:=」を併記できるのはなぜ?(2022/02/15)
・【PostgreSQL】緑本の関数定義&トリガーを試したい→挫折。つまずいたポイントをメモ(2022/03/04)
●2022年3~6月 Ping-t (3ヶ月弱)
自分用メモ
●2022年6月 受験→合格!
結果
合格 78 点(合格ライン: 64 点)
セクション名 | 正解率 |
---|---|
一般知識 | 87% |
運用管理 | 73% |
開発/SQL | 81% |
もし一から学習するならこうする
OSS-DB Silverは既にプログラマとして働いている方向けの資格なのか、プログラミング初心者が書いた記事は見当たりませんでした。
学習開始時の私
(プログラミング初心者 で、『スッキリ~』でSQLの基本をさらった上で OSS-DB Silverの学習を開始しようとしている人)
に向けてアドバイスするなら
どういった学習順序を勧めるか、という視点で書いてみます。
①CUI操作の基本を学ぶ
『スッキリ~』でSQLの基本を学んだ後、受験のためにまず手にしたのが緑本でした。
読み進めていき、まずつまずいたのが序盤の「インストール(3章)」で出てきたコマンドでした。
こんなかんじ↓
(前略)本書では、Linux環境での手順を例にとって説明していきます。(中略)
$ su -
# useradd -m -d /home/postgres postgres
# passwd postgres
# su - postgres
(引用元:『OSS教科書 OSS-DB Silver Ver2.0対応』p48)
『スッキリ~』ではSQLの説明はあるもののコマンド操作については一切触れられていなかったので、
ここに書かれているものが何なのか、一切理解できませんでした。
「Linuxとは?」「どこにこれを入力すれば良いの?」
「# や$も入力するんだろうな」と思っていたほどです。
Linuxとは何か、から調べはじめ、仮想環境を立ち上げて…というのを都度調べながら進めましたが、かなりの時間を要してしまいました。
なので、緑本に入る前に書籍等でLinuxの基本を学びつつ、CUIの操作を押さえておくと後の工程がスムーズなのでは、と思います。
こちらの本(新しいLinuxの教科書)とか良さそうです。
②環境構築する
緑本(3章インストール)ではソースコードからPostgreSQLをインストールする方法が解説されていますが、その方法でインストールしなくてもOKです。私は下記の環境で学習を進めました。
(緑本にも「既にPosgreSQLの動作環境がある場合はこの説を読み飛ばしてください。」(p48)とあります)
Host OS:Windows 10 Home
Virtual Machine:WSL2
Remote OS:Ubuntu
Database:PostgreSQL
DB GUI:DBeaver(←余裕があれば。緑本はCUI操作で解説されているためマストではない。が、GUIをSQL学習の際に利用すると、視覚的にSQLを扱いやすくなる。)
③緑本・黒本のSQL関連を1周
緑本の「8章SQLとオブジェクト、9章組み込み関数と演算子、10章トランザクション」を1周 & 黒本の該当箇所を1周する。
適宜、構築した環境でSQLを試してみる。
(緑本の「1章OSSDBの一般知識、2章DBの基礎知識、4章標準付属ツール、5章設定ファイル、6章バックアップとリストア、7章基本的な運用管理」については、後述するPing-tの解説の方が私にとってはスッキリとまとまっていて理解しやすかったです。緑本の方が細かな説明がされているので、先にPing-tで大きく概要を押さえてから緑本で詳細を読むと理解がすすみました。なのでこの段階ではこれらの箇所は飛ばします。)
④Ping-tの最強WEB問題集(全505問)を1周
私は緑本・黒本を終えてから最後の仕上げにPing-tを利用しましたが、もっと早い段階で取り入れれば良かったと思いました。
・Ping-tは問題→解説→参考 という流れで書かれており、その内容も要所が表になっていたり実際にコマンドを実行したときの画面が例として挙がっていたりと、私にとっては緑本・黒本の解説よりもわかりやすかった。
・Ping-tの解説と参考部分をOne Noteにまとめて、問題を解く度にそのOne Noteにメモしたり見返したりして理解を深めた。
・Ping-tの後に緑本の該当箇所を読むと緑本の内容も理解できたり、緑本により詳しい説明が書かれていて理解が深まったりした。黒本も同じく。
なので、③が終わった段階で、Ping-tの505問を1周すれば良いと思います。
この段階ではSQLの問題以外は初見だと思うので、問題を解く度に解説を読み、OneNote等にまとめつつ進めます。最初は初見のことだらけで、時間がかかるかもしれません。私は最初は1時間で6問ほどのペースでした。が、同じジャンルについて違う見方で出題されている問題もあるので、だんだん見たことのある解説も増えてきて、かかる時間が短くなっていくはずです。
⑤ ③で飛ばした箇所の緑本・黒本を1周
Ping-tを1周した段階で緑本・黒本に取り組みます。
⑥ Ping-tで演習・暗記
試験ではコマンドの()の有無、オプションの大文字or小文字等、細かなことも問われるため、最後は暗記も必要になってきます。なのでラストは覚えにくいところをまとめつつ、Ping-tで演習すると良いと思います。
例:version()、current_database()、current_user、current_timestamp、current_date
例:createdb -E、-createdb -O、createdb -l、createdb -T
所感
1.試験について
・試験自体は、Ping-tの問題に近い内容でした。
例えばトランザクションの分離レベルの違いで起きる現象について、緑本では直列化異常について触れられていましたが、Ping-tでは「ダーティリード・ファジーリード・ファントムリード」のみが記載されており、直列化異常については触れられていませんでした。実際、試験では直列化異常までは問われませんでした。
・試験には2問、初見の事項が入った問題が出ました。
①開発コミュニティ(だった気がする)のURLを問う問題。そこ出題されるのー!??と焦りました。
②問題文に出てきた単語も選択肢のコマンドも初見のもの、という問題。それがどんな単語/コマンドだったかは思い出せない…。
・ペン&紙を机上に置いておくことは禁止。筆記でのメモを取る事はできません。普段SQLの問題は、主キーや外部キーがどこに繋がっているか見やすくするために紙に書き出しながら解いていたので、若干不安でした。(テスト画面上にホワイトボードの機能が付いており、それで対応せよとのことでした)
2.緑本について
・緑本とPing-tの解説にズレがある箇所があり、戸惑いました。Ping-tは誤りがある場合はユーザーから指摘が入ってすぐ訂正する仕組みが出来上がっているようなので、ドキュメントとPing-tの情報を優先させて理解していけば良いと思います。
(例:緑本p101 postgresql.confファイルのパラメータ値の単位について、ドキュメントとPing-tは「B、kB、MB、GB、TB」、緑本は「kB、MB、GB」 とだけ書いてあった。問題として問われる部分だったので、どちらが正しいのだろうかと戸惑った。)
3.まとめ
学習開始前、他の方の合格体験記を何件か読ませていただき、数週間~4ヶ月の学習で取得されていることから
自分もそれくらいの期間で取得するぞ!と思っていました。
が、なんと1年半もかかってしまいました。
最初の9か月はほとんど環境構築をしていました。
合格体験記を読むに、この試験を取得しようとするのはほぼプログラマの方のようでした。
SQLに実務で触れたことがあったり、コマンド操作の方法等の前提知識がある場合は
実機での操作を行わずにPing-t等の問題演習のみで学習を進めても合格可能のようでした。
が、私のように、緑本に記されたコマンドを見て「"#"って自分で打つの?それとも最初から表示されているの?」
というレベルの場合、教科書に沿って環境構築する前に、何かしらのかたちでコマンド操作を覚えた方が進みが早いのではないか、
と思います。
私は都度わからないことをネットで調べる、人に聞く…という方法で進めましたが、
全体像が見えずに右往左往してしまったので…。
理解するのを保留した箇所
「ここは実際にPostgreSQLを運用する段階で理解していく部分なのかな」と判断し、深追いするのをやめた項目があるので、後々のために主なものをメモしておきます。試験では問われない部分です。
①ログの出力先の詳細
PostgreSQLサーバのログ出力先を設定するパラメータはlog_destination。設定できるログの出力先は以下。
stderr…サーバログを平文で標準エラー出力に出力
csvlog…サーバログをCSV形式で標準エラー出力に出力
syslog…サーバログをsyslogに出力
それぞれの出力先は覚えた。標準エラー出力が何かは調べてざくっと知った。が、syslogが何なのかはわからない。今は言葉だけ覚えておく。
②統計情報の数字の意味
「ANALYZEは統計情報(SQLの実行を効率的に行うために使用するデータ)を収集して更新するコマンド。ANALYZEを適切に実行しないと統計情報が実際のデータと異なってしまい、SQLの実行計画を適切に作成できなくなる。」という定義は覚えた。
が、「統計情報(SQLの実行を効率的に行うために使用するデータ)」の中身はわかっていない。
ANALYZEの解説動画で実際に動かしている様子は見たが、その数字がどうなると"効率的"な状況であるのか、がわかっていない。
③共有ロックの挙動
次にやりたいこと
①DBを使ったアプリを作る
まずは小さくDBを使ってみたいので、本にならってデスクトップアプリ(日記アプリ)を作ってみる。
(ほんとは業務で使うデータをOSSにのせて触ってみたいが、セキュリティの知識が乏しいので何か漏らしてはと不安。まだそこまでいけない。サンプルデータを作って資料作成時に使うような数字を得られるように練習したい。)
②Windows初期化~そこに直接PostgreSQLを入れて環境構築
③基本情報技術者試験
(どこかのタイミングで)Linux入門
『新しいLinuxの教科書』でLinuxの基本、CUI操作、Gitを使ったバージョン管理を覚えたい。