#はじめに
『オープンソースデータベース標準教科書 -PostgreSQL-(Ver.2.0.0)Kindle版』を進める。
同じくこの教科書で学習する人に向けて、また、自分の忘備録として
以下に、上記教科書を進めた手順を記録する。
##環境
ホストPC:Windows10
GUI DBツール:DBeaver
仮想化ソフト:VirtualBox
ゲストPC:Vagrant(=CentOS7=仮想マシン)
コンテナ型仮想環境:Docker
CUI DBクライアント:PostgreSQL
#環境準備
まず、教科書の内容を実行するための環境を準備する。
上記教科書では環境準備を「CUI環境」で行っている。
かつ、
OSS-DB Silver試験自体も、「CUI環境」を前提としている。
しかし、CUI環境だと
SQL文を視覚的に理解しずらい(入力時/実行結果確認時)ので、
視覚的にも機能的にもSQLを扱いやすくなるGUI(=DBeaver)を、今回はSQL学習のために利用する。
##教科書該当箇所
12-付録 実習の準備方法
##DBeaverを VagrantのPostgreSQLコンテナ(Docker) につなぐ
以前記事にまとめた方法
(【DBeaver】PostgreSQLへの再接続でエラーが出たので対処。「接続試行がタイムアウトしました」-2-3.Dockerを起動 )
で、DBeaverを VagrantのPostgreSQLコンテナ(Docker) につなぐ。
そうすることでGUI(DBeaver)で楽に「12 付録 実習の準備方法」のレコードを挿入し、教科書で使用するDBを作成&テーブルも作成する。
#1.DBeaverでDB(ossdb)を作成
≪教科書該当箇所=12. 1 データベースの作成≫
#2.DBeaverでテーブルを作成
≪教科書該当箇所=:12. 2 表の作成≫
表3つ(prod 表、 customer 表、 orders 表)を作成する。
1)「ossdb」で右クリック→「SQLエディタ」→「新しいSQLエディタ」
改行が消えて全て1行で表示されたので、見やすくするためにSQL文ごとに改行し、実行。
CREATE TABLE prod (prod_ id integer, prod_ name text, price integer);
CREATE TABLE customer (customer_ id integer, customer_ name text);
CREATE TABLE orders (order_ id integer, order_ date timestamp, customer_ id integer, prod_ id integer, qty integer);
(引用元:宮原徹; 喜田紘一. オープンソースデータベース標準教科書 -PostgreSQL-(Ver.2.0.0) (Kindle の位置No.4309-4317). LPI-Japan. Kindle 版. )
3)エラー発生。
エラー文=「SQLエラー[42601]:ERROR:syntax error at or near "integer" 位置:32」
syntax error。構文エラーです。位置は、"integer"の近くとのこと。
「位置:32」って何でしょう?32文字目?32語目?
32文字目がどこか数えてみると、最初のintegerの「e」が、該当の文字。
32語目は…どこで1語を区切って良いのかわからず、どれが32語目なのかがわかりません。
ということで、32が何を指すのかは今は不明。「構文エラー 位置」等でググっても上手く答えを見つけられませんでした。
コピペしたSQL文を見て怪しいな、と思うのが、アンダーバーの存在。教科書にはSQL文全てにアンダーバーがされていたのでどこにアンダーバーがあるのか読み取れないのですが、コピペすると上述の「教科書のSQL文」の通りアンダーバーが表示されています。
このアンダーバー、いらないんじゃないか?
全て削除して、実行すると・・・
4)コピペしたSQL文中のアンダーバーを全て削除して、実行。→エラー発生。
エラー文=「SQLエラー[42601]:ERROR:syntax error at or near "order" 位置:23」
んー・・・???
5)ここで黒澤さんの助け舟が出ました。余計な半角スペースが入っているとのこと。
「_」の後の半角スペース8か所を全て消し、実行。→実行成功!
(上記画像の1行目「prod id」は、本来は「prod_id」です。間違えて消してしまった・・・。)
Kindleからコピペしたままだと、余計な半角スペースが入る事がよくあるそうです。
#3.使うデータベースを変えた
「2.DBeaverでテーブルを作成」を終えた後、一度PCをシャットダウンし、後日再度同じデータベースに接続して続きの作業をしようとしたところ、作ったデータベース「ossdb」がまるっと消えていました。
(状況 = こちらのQiita(【DBeaver】作ったデータベースが消えてしまった!)にまとめた)
結果、ossdbは作らずに、first_tutorialをそのまま使って学習を進めることにしました。
#4.改めてDBeaverでテーブルを作成
ossdbが消えてしまったので、first_tutorialに直接≪教科書 12. 2 表の作成≫のテーブルを作成していきます。
表3つ(prod 表、 customer 表、 orders 表)を作成します。
[first_tutorial]上で右クリック→[SQLエディタ]→[新しいSQLエディタ]→教科書のSQL分をコピペ
→idの後ろのスペースを全て削除→SQL実行(=黄色い▶をクリック)
えーと...実行されたのはわかるんだけど、
どこかのアイコンをクリックすればテーブルが表示されたりするのかな?
視覚的に作ったテーブルを確認するにはどうすれば良いのだろう?
・・・わからないけど、とにかく次に進んでみます。
#5.作成したテーブルにデータを入力する
≪教科書 12. 3 データの入力≫
作成したテーブルに初期データを入力します。
教科書には、「このSQLをコピペすれば、初期データがそれぞれの表に入力されるよ!」と書かれています。
やってみます。
どこにコピペすれば良いのでしょうか?
まずは4.で入力したSQL3行の下にコピペしてみます。
PCのKindleアプリで教科書を開いているのですが、教科書のSQLは、目視で確認できる部分に表示されていないSQLがあるようです。コピペすると表示されるSQLが、目視で教科書を見ると表示されていません。
目視で手入力でSQLを実行しようとしても、それはできないようです。(変なところでSQL文が切れている)
コピペしても、ラスト2行のINSERT文、「(」が使われているのに文末が「)」でくくられていないのが気になります。大丈夫なのでしょうか・・・。
何はともあれ、また「_」の後のスペースを全て削除して、実行してみます。
エラーです。
「SQLエラー[42601]:ERRIR:syntax error at or near "INSERT" 位置: 54」
INSERT文周りのエラーです。やはり・・・!
ラスト2行については、VALUESが設定されていません。
おそらく、Kindle作成時に誤って記載されたのだと思われます。
なので、この2行を削除して、再度実行してみます。
成功です!
さあ、このテーブルが作成されていると、どこで確認すれば良いのでしょうか。
ひとまず「12 付録 実習の準備」の章はここで終わっているので、あとは教科書のSQL部分を最初から進めてみて確認していこうと思います。