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?

【DBeaver】作ったデータベースが消えてしまった!

Last updated at Posted at 2021-05-28

起きたこと

『オープンソースデータベース標準教科書 -PostgreSQL-(Ver.2.0.0)Kindle版』
の「12-付録 実習の準備方法」を進めています。
(作業内容=Qiita記事「PostgreSQL実習環境の準備_『OSS-DB標準教科書』」

この作業内容記事の「2.DBeaverでDB(ossdb)を作成」「3.DBeaverでテーブルを作成」の通り、DBeaverで「ossdb」という名前のデータベースとテーブルを作成しました。

【データベース作成当時の画面】
ossdb.png

作成後、一度DBeaverを閉じ、後日、その続きを進めようとDBeaverを立ち上げたところ、作成したデータベース「ossdb」がまるごと消えていました。

【データベースが消えた画面】
消えた.png

これでは教科書の続きを進めることができません。
対処方法を調べます。

環境

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

試行錯誤1.もう一度同じ名前のDBを作成してみる

まず、「ossdb」がまるっと消えたと仮定し、新規で「ossdb」を作成しようと試みました。

[first_tutorial]上で右クリック→「作成」→「データベース」
→出てきたダイアログボックスに「ossdb」と入力(下図)→「OK」

ダイアログ.png

すると、下図エラーが発生。
error.png
「database "ossdb" already exists」
データベースは消えていたなかったということでしょうか。
仮定は間違いでした。

では、なぜ見かけ上消えてしまっているのでしょうか・・・?

試行錯誤2.検索にかけてみる

1.下図検索窓に「ossdb」と入力し、「Enter」。
検索.png
2.下図のように、first_tutorialのプロパティが表示された。
100.png

なぜーー???
「ossdb」を表示して欲しいのに...!

試行錯誤3.一度ossdbを削除するコマンドを実行し、再度新規作成する

今、DBeaverで見かけ上見えなくなっているデータベース「ossdb」。
PowerShellのコマンドでなら削除できるかもしれません。
現在PowerShellの状態は下画のとおり。
「first_tutlrial=#」。
ここに、データベース削除するコマンドを打ち込みます。

(↓参考:『OSS教科書 OSS-DB Silver Ver.2.0対応』p81「4-7 dropdb」)

PowerShell
# dropdb -U used -i ossdb

実行したPowerShell画面がこちら。

変化なし!!

DBeaverで試行錯誤1の方法をもう一度実行し「ossdb」を新規作成しようとしてみましたが、また「database "ossdb" already exists」というエラーが出ました。
「ossdb」はまだどこかに存在している状態のようです。

ここで気になったのが、OSS教科書にあったこちらの表記。

データベースを削除できるのは、スーパーユーザ、もしくは削除するデータベースの所有者だけです(所有者であれば、データベースの作成権限は不要です。)
(引用元:『OSS教科書 OSS-DB Silver Ver.2.0対応』p81「4-7 dropdb」)

その次に例として出されているコマンドの表記が、
「$ dropdb -U postgres -i testdb」となっています。
私の画面だと「#」マーク。教科書の例だと「$」マーク。

OSS教科書には、

本書では、シャープ(#)で始まるコマンド行はrootユーザで実行します。ドルマーク($)で始まるコマンド行は一般ユーザーで実行します。
(引用元:『OSS教科書 OSS-DB Silver Ver.2.0対応』p48「3-1-1 事前準備」)

とあります。
教科書は「$」の一般ユーザで実行されているようです。
私のPowerShellは今「#」マーク表記になっていますが、これは何ユーザなのでしょうか?
「PostgreSQLを操作するためのユーザ」であると思うのですが、これは「一般ユーザ」の部類に入るのでしょうか?
仮にここを「$」に切り替え、その状態で「dropdb -U used -i ossdb」を実行したら、「ossdb」の削除は実行できるのでしょうか?

なんだか違う気がする・・・。
目的は「ossdb」をDBeaver上に表示させることです。それをかなえるためにはどうすれば良いのでしょうか?

試行錯誤4.ossdbのことは忘れて「first_tutorial」に「ossdb-a」を作成する

ossdbはどこへ行ったのか、謎のままですが、
こうしていては先へ進めないので、標準教科書とは別の名前のデータベースを新規作成することにしました。

[first_tutorial]上で右クリック→「作成」→「データベース」
→出てきたダイアログボックスに「ossdb」と入力(下図)→「OK」

ossdb-a.png

できました!
また消えてしまわれても困るので、いちどDBeaverを閉じて再度立ち上げ、消えないか確認します。

DBeaver再起動!
また消えた.png

・・・・・・また消えてしまいました。
新たに「ossdb-a」を作成しようとしても、やはり同じ「database "ossdb-a" already exists」のエラーが出ました。

あれかな、DBeaverを閉じる前に、「上書き保存」的なのをしなきゃならないのかな?
と思い見てみるも、
選択不可.png
この通り反転していて選択できない状態。
試しに「ossdb-b」を作って同じ動作をしても、やはり反転していて選択できませんでした。

結論

データベース「first_tutorial」をそのまま使うことにしました。
その中に新たにデータベースを作るのではなく。

標準教科書の記載はこうです。

[root@ localhost ~]# su - postgres
[postgres@ localhost ~]$ createdb ossdb
[postgres@ localhost ~]$ psql ossdb psql (10. 1)
Type "help" for help. ossdb =#
(引用元:宮原徹; 喜田紘一. オープンソースデータベース標準教科書 -PostgreSQL-(Ver.2.0.0) (Kindle の位置No.4300-4305). LPI-Japan. Kindle 版.-12.1 データベースの作成)

PowerShellの状態はこうです。

PowerShell
[vagrant@localhost docker]$ docker exec -it postgres_container /bin/bash
root@************:/# psql -U user first_tutorial
psql (10.16 (Debian 10.16-1.pgdg90+1))
Type "help" for help.

first_tutorial=#

これは、標準教科書は「ossdb」を作ったけれど、師匠のお手本コマンドでは、同等の位置づけで「first_tutorial」を作った、ということなのでは?

だとしたら、標準教科書の「ossdb」を「first_tutorial」と置き換えて標準教科書の内容を進めれば良いのではないか???
→師匠より「その通り そこが異なっていても学習は進めれる」とのコメントいただきました。
ossdbがどこへ消えたのか謎のままですが、そこは今後DBeaverを使っていくうちにわかるかもしれないので、今はfirst_tutorialで教科書を進めます!

0
0
1

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?