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

# 起きたこと
[『オープンソースデータベース標準教科書 -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)
の「12-付録 実習の準備方法」を進めています。
（作業内容=Qiita記事[「PostgreSQL実習環境の準備_『OSS-DB標準教科書』」](https://qiita.com/ume-san/private/ee11b75be214e4bb950e)）

この作業内容記事の[「2.DBeaverでDB(ossdb)を作成」](https://qiita.com/ume-san/private/ee11b75be214e4bb950e#2dbeaver%E3%81%A7dbossdb%E3%82%92%E4%BD%9C%E6%88%90)[「3.DBeaverでテーブルを作成」](https://qiita.com/ume-san/private/ee11b75be214e4bb950e#3dbeaver%E3%81%A7%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90)の通り、DBeaverで「ossdb」という名前のデータベースとテーブルを作成しました。

【データベース作成当時の画面】
<img width="200" alt="ossdb.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/c73bab95-2028-f9f9-7beb-e2063eab18ec.png">

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

【データベースが消えた画面】
<img width="200" alt="消えた.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/c9892df7-e2e2-eb29-533e-65a11fa97e75.png">

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

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

# 試行錯誤1.もう一度同じ名前のDBを作成してみる
まず、「ossdb」がまるっと消えたと仮定し、新規で「ossdb」を作成しようと試みました。

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

<img widtg="200" alt="ダイアログ.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/ec510e40-7c2d-b369-e814-c2e62ab56dd7.png">

すると、下図エラーが発生。
<img width="300" alt="error.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/46649382-f0fe-492a-302a-e33685b93acc.png">
「database "ossdb" already exists」
データベースは消えていたなかったということでしょうか。
仮定は間違いでした。

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

# 試行錯誤2.検索にかけてみる
1.下図検索窓に「ossdb」と入力し、「Enter」。
<img width="200" alt="検索.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/1e382b46-af6d-b0f9-a08e-1747b535e4c7.png">
2.下図のように、first_tutorialのプロパティが表示された。
<img width="700" alt="100.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/1147bab7-e543-fc51-4e36-73720d6da465.png">

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

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

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

<img width="500" alt"無題.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/be7296bd-d0b7-1cbd-a096-aa6930d3ed8b.png">


（↓参考：『OSS教科書 OSS-DB Silver Ver.2.0対応』p81「4-7 dropdb」）

```:PowerShell
# dropdb -U used -i ossdb
```
実行したPowerShell画面がこちら。
<img width="400" alt"無題.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/9c7ccb96-b21a-3255-15f4-deeb6217acf2.png">
変化なし！！

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」

<img widtg="200" alt="ossdb-a.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/31dedc12-4297-9c88-a340-5137c5adda7a.png">

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

DBeaver再起動！
<img width="400" alt="また消えた.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/80baadf8-f817-e55e-b7b6-12ef84b86a39.png">

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

あれかな、DBeaverを閉じる前に、「上書き保存」的なのをしなきゃならないのかな？
と思い見てみるも、
<img width="200" alt="選択不可.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/c628a692-73af-ee64-13b9-d8c8d89485fc.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で教科書を進めます！