PostgreSQL実習環境の準備_『OSS-DB標準教科書』1

#はじめに
『[オープンソースデータベース標準教科書 -PostgreSQL-（Ver.2.0.0）Kindle版](https://www.amazon.co.jp/%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E6%A8%99%E6%BA%96%E6%95%99%E7%A7%91%E6%9B%B8-PostgreSQL-%E5%AE%AE%E5%8E%9F%E5%BE%B9-ebook/dp/B00BW2KFSW/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9&qid=1617198796&sr=8-1)』を進める。
同じくこの教科書で学習する人に向けて、また、自分の忘備録として
以下に、上記教科書を進めた手順を記録する。

##環境
ホスト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を起動](https://qiita.com/ume-san/items/7c843c6ebed290c73106#2-3docker%E3%82%92%E8%B5%B7%E5%8B%95) ）
で、DBeaverを VagrantのPostgreSQLコンテナ(Docker) につなぐ。

そうすることでGUI(DBeaver)で楽に「12 付録 実習の準備方法」のレコードを挿入し、教科書で使用するDBを作成&テーブルも作成する。

#1.DBeaverでDB(ossdb)を作成

≪教科書該当箇所＝12. 1 データベースの作成≫

1.
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/63db37fa-bc7f-0e57-a8fd-9487fe7be223.png)
↓
2.
![2png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/15229b2a-6877-7e7f-c61a-3834a83c5e0b.png)
↓
3.
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/077ead0a-7ed9-3821-60bc-310e54e44a2a.png)

#2.DBeaverでテーブルを作成

≪教科書該当箇所＝：12. 2 表の作成≫

表3つ（prod 表、 customer 表、 orders 表）を作成する。

1）「ossdb」で右クリック→「SQLエディタ」→「新しいSQLエディタ」
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/a4f34235-0bc1-8ab4-0b85-d6fe2a2253ff.png)

2）下記赤枠部分に教科書のSQLをコピペ。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/75b40c4b-f7b6-2ad6-db04-57c24fc73744.png)

改行が消えて全て1行で表示されたので、見やすくするためにSQL文ごとに改行し、実行。

```:教科書の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」
![無題2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/903dc917-ee2d-bcd9-41af-c56bdd8761e2.png)

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」
![無題3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/b667eeb8-45bf-19d3-7a8d-0b174b05ebd2.png)
んー・・・？？？

5）ここで黒澤さんの助け舟が出ました。余計な半角スペースが入っているとのこと。
「_」の後の半角スペース8か所を全て消し、実行。→実行成功！

![(98).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/a9d33cd2-9bc9-a924-13c1-026697d5df77.png)

（上記画像の1行目「prod id」は、本来は「prod_id」です。間違えて消してしまった・・・。）

Kindleからコピペしたままだと、余計な半角スペースが入る事がよくあるそうです。

#3.使うデータベースを変えた
「2.DBeaverでテーブルを作成」を終えた後、一度PCをシャットダウンし、後日再度同じデータベースに接続して続きの作業をしようとしたところ、作ったデータベース「ossdb」がまるっと消えていました。

（状況　＝　こちらのQiita([【DBeaver】作ったデータベースが消えてしまった！](https://qiita.com/ume-san/items/e6ffe8beeb146287ecaf))にまとめた）

結果、ossdbは作らずに、first_tutorialをそのまま使って学習を進めることにしました。

#4.改めてDBeaverでテーブルを作成
ossdbが消えてしまったので、first_tutorialに直接≪教科書　12. 2 表の作成≫のテーブルを作成していきます。
表3つ（prod 表、 customer 表、 orders 表）を作成します。
[first_tutorial]上で右クリック→[SQLエディタ]→[新しいSQLエディタ]→教科書のSQL分をコピペ
→idの後ろのスペースを全て削除→SQL実行（＝黄色い▶をクリック）

↓実行された画面。
<img width="700" aotlt="1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/55d1da90-b576-6f40-e168-5f7df49151a1.png">

えーと...実行されたのはわかるんだけど、
どこかのアイコンをクリックすればテーブルが表示されたりするのかな？
視覚的に作ったテーブルを確認するにはどうすれば良いのだろう？
・・・わからないけど、とにかく次に進んでみます。

#5.作成したテーブルにデータを入力する
≪教科書　12. 3 データの入力≫
作成したテーブルに初期データを入力します。
教科書には、「このSQLをコピペすれば、初期データがそれぞれの表に入力されるよ！」と書かれています。
やってみます。

どこにコピペすれば良いのでしょうか？
まずは4.で入力したSQL3行の下にコピペしてみます。

PCのKindleアプリで教科書を開いているのですが、教科書のSQLは、目視で確認できる部分に表示されていないSQLがあるようです。コピペすると表示されるSQLが、目視で教科書を見ると表示されていません。
目視で手入力でSQLを実行しようとしても、それはできないようです。（変なところでSQL文が切れている）

コピペしても、ラスト2行のINSERT文、「(」が使われているのに文末が「)」でくくられていないのが気になります。大丈夫なのでしょうか・・・。
何はともあれ、また「_」の後のスペースを全て削除して、実行してみます。

実行！
<img width="700" alt="2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/901baa81-4e7a-2450-78a0-e8e77cc76787.png">

エラーです。
「SQLエラー[42601]:ERRIR:syntax error at or near "INSERT" 位置: 54」
INSERT文周りのエラーです。やはり・・・！

ラスト2行については、VALUESが設定されていません。
おそらく、Kindle作成時に誤って記載されたのだと思われます。
なので、この2行を削除して、再度実行してみます。

2行削除　&　実行！
<img width="700" alt="3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/f17868a1-6d95-1590-8ee9-fd292aa6da70.png">

成功です！
さあ、このテーブルが作成されていると、どこで確認すれば良いのでしょうか。
ひとまず「12 付録 実習の準備」の章はここで終わっているので、あとは教科書のSQL部分を最初から進めてみて確認していこうと思います。


#参考
・『[オープンソースデータベース標準教科書 -PostgreSQL-（Ver.2.0.0）Kindle版](https://www.amazon.co.jp/%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E6%A8%99%E6%BA%96%E6%95%99%E7%A7%91%E6%9B%B8-PostgreSQL-%E5%AE%AE%E5%8E%9F%E5%BE%B9-ebook/dp/B00BW2KFSW/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9&qid=1617198796&sr=8-1)』