0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-05-28

#はじめに
オープンソースデータベース標準教科書 -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 データベースの作成≫

1.png

2.
2png.png

3.
3.png

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

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

表3つ(prod 表、 customer 表、 orders 表)を作成する。

1)「ossdb」で右クリック→「SQLエディタ」→「新しいSQLエディタ」
6.png

2)下記赤枠部分に教科書のSQLをコピペ。
7.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

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
んー・・・???

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

(98).png

(上記画像の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文、「(」が使われているのに文末が「)」でくくられていないのが気になります。大丈夫なのでしょうか・・・。
何はともあれ、また「_」の後のスペースを全て削除して、実行してみます。

実行!
2.png

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

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

2行削除 & 実行!
3.png

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

#参考
・『オープンソースデータベース標準教科書 -PostgreSQL-(Ver.2.0.0)Kindle版

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?