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.

DBeaverでCREATE文を実行してもテーブルが作れない_『OSS-DB標準教科書』2-SQLによるDBの操作 基礎

Last updated at Posted at 2021-05-30

#はじめに
オープンソースデータベース標準教科書 -PostgreSQL-(Ver.2.0.0)Kindle版』を進めています。
同じくこの教科書で学習する人に向けて、また、自分の忘備録として
以下に、上記教科書を進めた手順を記録します。
今回のテーマは「SQLによるDBの操作 基礎」!

##今回つまずいたこと
・DBeaverでCREATE文を実行してもテーブルが作れない →解決( [ 2.全件全項目検索 ] 参照)

##環境
ホストPC:Windows10
GUI DBツール:DBeaver
仮想化ソフト:VirtualBox
ゲストPC:Vagrant(=CentOS7=仮想マシン)
コンテナ型仮想環境:Docker
CUI DBクライアント:PostgreSQL

#前回までの内容と今回の内容
前回の内容
『OSS-DB標準教科書』1_PostgreSQL実習環境の準備

今回の内容
標準教科書を最初から読み進め、SQL実行の項は前回作ったデータベースに実行していきます。今回は1章(SQLによるDBの操作 基礎編)の中のSQLに関する部分
・1.5 データの検索(SELECT)
・1.6 ORDER BY句による並べ替え
・1.7 表の結合
・1.8 行データの入力(INSERT)
・1.9 データの更新(UPDATE)
・1.10 行データの削除(DELETE)
を進めます。

#1.SELECT文の基本構文
≪標準教科書該当箇所≫
1.5 データの検索(SELECT)

まず、SELECT文の基本構文の復習。
↓これ!

SELECT [DISTINCT] * | SELECT 項目リスト
  FROM 表 名[,…]
  [WHERE 検索 条件式]
  [GROUP BY グループ化式]
  [HAVING 検索条件式]
  [ORDER BY 並べ替え式]

#2.データの検索(SELECT)
≪標準教科書該当箇所≫
1.5.1 全件全項目検索

まず、前回作ったcustomer表、prod表、orders表の全件全項目検索を行います。

DBeaver/PostgreSQL
SELECT*FROM customer;

を実行します。
これをDBeaverのどこに入力すれば良いのでしょうか?
ひとまず、前回表を作ったときのSQLに続けて入力してみます。
実行!
10.png
エラーになりました。

エラー文:SQLエラー [42P01]: ERROR: relation "customer" does not exist 位置: 13

・・・なんだか、前回新規DB「ossdb」を作ったけど、DBeaverを再起動すると「このDBは存在しません」のエラーが出たときと、似たエラーな気がする。あるはずなのに、無いと言われている、という点で、似ている。

そもそも、 ↓このテーブルの欄に、前回作ったはずの「customer表、prod表、orders表」が表示されていない時点で、変な気がする。
20.png
今は「スキーマ」の中に「public」しか存在いしていないけど、本来は、前回作った「customer表、prod表、orders表」が入っているスキーマが、「public」と並列になるかたちで表示されるのでは??

そもそもスキーマって何?
↓こちらの記事に、図入りでわかりやすく説明されていました。

PostgreSQLにおいて実際のデータはテーブルに格納されます。テーブルは目的に応じて複数作成することができ、それをまとめているのがデータベースですが、さらに PostgreSQL ではデータベースの中にスキーマと呼ばれるものがあります。
スキーマはデータベースに作成されるテーブルや関数といったオブジェクトをグループ化するものです。スキーマが異なれば同じデータベース内であっても同じテーブル名でテーブルを作成することができます。データベースを作成すると、自動的に public と呼ばれる特別なスキーマが作成されます。
(引用元:PostgreSQLにおけるデータベース、スキーマ、テーブルの関係)-DBOnline

「public」は自動的に作成されるスキーマなんだと。
これはやはり、自分で「customer表、prod表、orders表」を入れるスキーマを作らなければならない、ということなのではないか?

スキーマ、作ってみましょう。
「スキーマ」の上で右クリックすると、「新しく作るスキーマ」という選択肢が出てきました。
クリック!
30.png

名前を「first_tutorial」と付けて[OK]をクリック
60.png

新しいスキーマが出来ました!この中に、前回作った表3つを移動できれば一番良いのですが、それは方法がわからないので(どこに作成した表があるのかすらわからない・・・)、
ここで右クリックしてみたところ、[作成]→[表]という表示があったのでクリックしてみました。
40.png

試しにGUIでテーブル作成してみようかとクリックしたのですが、テーブルは作れても、その中の値をGUIでいじる方法がよくわかりませんでした。(データ型とかを設定しようと該当箇所をクリックしても反応しない)

やはりSQLでテーブル作成します。
100.png
CREATE文3つは実行成功したのですが、[テーブル]欄には何の変化もありません。
GUIに反映されていない・・・・?
[テーブル]で右クリックし、[更新]をクリックしてみると、
200.png
[orders]表だけが反映されました!
[prod]表と[customer]表は、どこへ行ってしまったのでしょうか?

もしや、私はCREATE文3つを一度に記述して、一度に実行しようとしたけれど、
それで実行できたのは最終行の[orders]表だけで、1行目と2行目は、実は個別に実行しなくてはならなかったのでしょうか?

試してみます。

[prod]表と[customer]表のCREATE文それぞれで[Ctrl+Enter]を押し実行。→[テーブル]で右クリックし[更新]をクリック。すると、
1000.png
できましたー!!

1行1行「実行」する必要があるんですね!

同様の方法で1行1行INSERT文を実行します。
その後、「 SELECT * FROM customer; 」を実行すると・・・

テーブルが表示されました!
prod表、orders表についても同じ操作でテーブルを表示させることができました。

次の項目である

≪標準教科書該当箇所≫
-1.5.2 SELECT項目リスト
-1.5.3 WHERE句による絞り込み検索
・1.6 ORDER BY句による並べ替え
・1.7 表の結合
・1.8 行データの入力(INSERT)
・1.9 データの更新(UPDATE)
・1.10 行データの削除(DELETE)

は問題なく完了しました。
明日は 2.データ型 に進みます。

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?