DBeaverでElephantSQL(PostgreSQL)を操作してみる


はじめに

OSS-DBSilver取得に向けてDBeaverでElephantSQLを触ることでPostgreSQLの操作を学習するぞ!
と、前回、DBeaverでElepantSQLに接続するところまで終わりました。

接続を終えて、さあ、試しに『スッキリわかるSQL入門』で学んだSQLを試してみようかね、と思ったのですが・・・

早速手が止まりました。

SQL忘れてるー。

「テーブル作成→テーブル削除」というシンプルな操作を復習したいと思います。

また、そのあとで問題集(黒本)の問題と同じSQLをDBeaverで実行してみました。問題自体は解けるし問題文の意味もわかるのですが、実際に問題文と同じSQLをDBeaver上で試してみると、思った通りの返しが返ってきませんでした。結局原因はわからずじまいです。
まだDBeaverの操作に慣れていないので、今はとにかく問題集を進めて、追って操作に慣れてきたら原因を探そうと思います。

テーブル作成

『スッキリ~』は9章まで終えていましたが、そこではSELECT,INSERT,UPDATE,DELETEなどの命令を使って、既存のテーブルに対してデータを操作する方法を学んでいました。なので、テーブル作成はしたことがありませんでした。
10章(テーブルの作成)を参考に、自分でテーブル作成してみます。

実行するSQL:1
家計簿テーブルを作成する
CREATE TABLE テーブル名 (
列名1 列1の型名,
列名2 列2の型名,


列名x 列xの型名
)
DBeaver
CREATE TABLE 家計簿 (
  日付    DATE,
 費目ID     INTEGER,
 メモ       VARCHAR(100),
 入金額     INTEGER,
 出金額     INTEGER
)
データ型名 区分 データ種別 メモ
DATE型 - 日付 -
INTEGER型 整数値 数値 -
VARCHAR型 可変長 文字列 VACHAR(100)=可変長文字列(最大100バイト)

【DBeaverの操作】
1.DBナビゲータタグの自分のユーザ名のところで右クリック
2.「SQLエディタ」をクリック→「SQLエディタ」をクリック
3.出てきた画面に上記SQLを打ち込む
4.「Ctrl+Enter」で実行
すると、エラーになってしまいました。

【エラー画面】

42601,構文エラーです。
なぜエラー?
PostgreSQLのドキュメントにあったこちらのSQL(下記※1)を参考に、

※1
CREATE TABLE weather (
    city            varchar(80),
    temp_lo         int,           -- 最低気温
    temp_hi         int,           -- 最高気温
    prcp            real,          -- 降水量
    date            date
);

・最後の「 )」の後に「;」を付けて
・INTEGRE → int に変更して
実行しても、エラー。

そこで ※1 のSQLをコピペしてテーブル名と列名のみ変更し実行したところ、成功。
家計簿テーブルが作成されました。

やったー!
ただ、これはデータ型は※1の内容のまま。データ型をもとの家計簿の内容に合わせるとエラーが出てしまう。

なんでやろ??

テーブル削除

実行するSQL:2
家計簿テーブルを削除する
DROP TABLE テーブル名
DBeaver
DROP TABLE 家計簿

【DBeaverの操作】
1.DBナビゲータタグの自分のユーザ名のところで右クリック
2.「SQLコンソールでデータを読み込む」をクリック
3.出てきた画面に上記SQLを打ち込む
4.「Ctrl+Enter」で実行

すると、反応無し。

???

DBナビゲータタグにはまだ「家計簿」テーブルのアイコンが残っている。
もう一度「DROP TABLE 家計簿」を打ち込む。
すると

「家計簿テーブルは存在しません」というエラーが出る。
ということは、家計簿テーブルは削除できているということ?
じゃあなんでまだタグの中に家計簿テーブルのアイコンがあるの?

???

もやもや。

→DBeaverを閉じてPCを再起動したら、家計簿テーブルのアイコンも消えていた!
これでOK。

→他にテーブルを作って試したところ、DBeaverを閉じてまた起動すれば、DROPしたテーブルのアイコンは消えた。PCのシャットダウンは必要無かった。それにしても、DBeaverを再起動しなければDROPは反映されないものなのだろうか?

黒本(問題集)をやってみる

まだまだDBeaverでSQLを触った方が良い気もしつつ、
本題の資格取得に向けて勉強を早く始めたいので
次は 黒本(『OSS-DB Silver ver2.0対応 問題集』) に入りたいと思います。

1~3章は一般知識や、インストール、コマンド操作が必要な内容だったので、4章(SQL)からやっていきます。
問2はCRATE TABLE(テーブル作成)とINSERT INTO(値入力)のSQLが登場していました。
DBeaverで「SQLエディタ」→「新しいSQLエディタ」を開き、
問題と同じSQLを打ち込むことで、そのままSQLの練習になりそうです。

テーブル作成(4章問2)

4章問2のSQLを入力し、「Ctrl+Enter」で実行。
問題集だと「INSERT INTO」「VALUES]は大文字だけど、DBeaverに打ち込むと小文字になる。


エラーは出ないものの、私は下部の「Statistics1」の欄に実際にテーブルの形で入力したSQLが表示されるとイメージしていたのに、それが出てこない。
・・・これで良いのか?自分の操作方法が合っているのかどうか、わからない。
そしてまた今回も「DBナビゲータタブ」に「tab1」のアイコンが現れなかった。
DBeaverを再起動したら、現れた。
これは何なのだろう。こういう仕様?それとも再起動せずにアイコン表示させられる方法あるのか?

テーブル作成とSELECTで抽出(4章問3)

4章問3の問題文で用意されていた下記テーブルを作ってみる。

id price
1 100
2 149
3 150
4 151
DBeaver
create table tab1 (id INTEGER,price INTEGER);
insert into tab1 values (1,100);
insert into tab1 values (2,149);
insert into tab1 values (3,150);
insert into tab1 values (4,151);

↑カラムに名付けする方法ってこれで良かったんだっけ?DBeaver上にテーブルが表示されると思っていたが、表示されず、確認できない。どうやってテーブルの形になっている状態を確認すれば良いの?

上記の内容を「グリット」をクリックして入力できているか確認してみたけれど、カラム名とデータ型は反映されているけどINSERTで入力した4つの数値が反映されていない。

DBeaver
DROP TABLE tab1:

でテーブルを一度消して、

・・・・・・

まず

DBeaver
create table tab1 (id INTEGER,price INTEGER);

だけを実行してテーブル作成する。

その後、

DBeaver
insert into tab1 values (1,100);
insert into tab1 values (2,149);
insert into tab1 values (3,150);
insert into tab1 values (4,151);
SELECT * FROM tab1 WHERE price >=150;

を実行してみると…

テーブルが表示された!
けど、なぜか4行にわたって同じ結果が繰り返し表示されている…
出てほしい回答は「150」「151」の2行なのに、
「151」のみしか回答として戻されていない。
何で?

・・・・・・

試しに
「WHERE price <120;」
を実行してみる。

DBeaver
SELECT * FROM tab1 WHERE price <120;

すると、こう返ってきた。

OKOK。

・・・・・・

次に「WHERE price <150;」を実行してみる。

DBeaver
SELECT * FROM tab1 WHERE price <150;

「データなし」と返ってきた。何で!?

・・・・・・

なんとなく、もう一度問題文と同じSQLを入力してみる。
すると今度は、「4/151」が1行だけ返ってきた!
最初にやったときは「4/151」が4行返ってきたのに、なんで!?
しかもやはり「3/150」は返ってこない。
もはや何が正しい入力&返しなのかがわからない・・・。

SQLが違っているのか?でも、問題文と全く同じ。
私は何を見落としているのだろうか??

・・・・・・

ちなみにこの問題は
問題:「SELECT * FROM tab1 WHERE price >=150;」で戻される行数は? (A.0行 B.1行 C.2行 D.3行 E.4行)
答え:C.2行
というもの。
うん。問題文の意味も、答えも、わかる。
でも、実際にDBeaver上で自分で試してみると、思った通りの動きをしてくれない。もどかしい!なぜ!!

おわりに

DBeaverの操作は全く手探りの状態です。
予想していたのと違う動きを返されるし、私の入力自体が間違っている可能性が高いです。だけど、どこが間違っているのかわからないです。
DBeaverの操作がきちんとできなくても、とりあえず問題集は進めていけるので、とにかく問題集は進めていきます。

現在4章問1~16を解いたのですが、DBeaverでスムーズに実行できるものもあれば、問題の解答自体は理解できてもDBeaverで同じSQLを入力しても解答と同じものが返ってこないものもあります。

進めながら、思い通りの操作ができなくてもいいからDBeaverでSQLを実行してみます。触りながらわかってくることもあると思うので…。

未解決事項

・テーブル削除(DROP TABLE)を実行してもテーブルのDBナビゲータタグから該当テーブルのアイコンが消えない。DBeaverを再起動すると、消える。再起動せずにアイコンを消す方法はあるのか?