Postgresql超初心者が知っておくべきこと

# 超初心者向けPostgresql入門
IT全般に関する知識が皆無の文系大学生がインターンシップで初めて`Postgresql`を触り、少し苦労したので、知っておくべき基礎中の基礎をご紹介したいと思います。
`Postgresql`を初めて触るときに、こういう記事があればよかったなという記事にしたいと思いますので何卒よろしくお願いします。

深い理解というよりは、`Postgresql`がざっくりどんな感じのものかということを理解するためにこの記事を読んでいただけるとありがたいです。

ちなみに著者のパソコンはMacbookですので、基本的には
`MacbookユーザーのPostgresql超初心者向けの記事`となっております。

## Postgresqlとは何ぞや
>PostgreSQL（ポストグレスキューエル）はオープンソースのリレーショナルデータベース管理システム（RDBMS）です。

Codezine「Postgresqlとは？」より引用
https://codezine.jp/article/detail/11753

簡単に言いますと、`データがたくさん入っているところから欲しいデータがどこにあるのかを調べることができるものです。`

さらにわかりやすく例を使いますと、`家（データベース）`の`自室（スキーマ）`の中の`洋服タンス（テーブル）`の中に`欲しい服（データ）`があるかを調べられるものです。それだけでなく、どこに何が置いてあるかわからないという家を整理整頓してくれるものです。

部屋の整理が苦手な方なら、朝起きて急いで家を出たい時に着たい服が見つからないということもよくあるでしょうから、この`Postgresql`が便利であるということはお分かりになるでしょう。

## Postgresqlを始める前に準備すること
はじめに`Homebrew`と`Docker`をインストールして、ターミナルで`Postgresql`を開いてください。
インターン2日目にこの指示を受けた私は脳がパンクしました。

順に説明していきます。

### ターミナルとは何ぞや
簡単に言いますと、`パソコンに命令する場所です`。
ホーム画面で`command +  space`でSpotlight検索ができますので「ターミナル」と打ってください。
![スクリーンショット 2020-09-08 14.49.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701603/192572b1-4b04-f773-b4a2-aace6ca7b5f0.png)
ハッカーみたいなカッコいい画面が出てきます。
これが`ターミナル`です。
`Postgresql`を使用する際は基本的にここで作業をすることになります。

ちなみに
`Postgresqlを開いた状態のコマンドと、ターミナルでのコマンドは違うので要注意！`

Posgresqlに入れている場合は
`データベース名=#`
入れていない場合は上画面のように
`フォルダ名$`
のようになっていますのでわかると思います。

### Homebrewとは何ぞや
>Homebrewとは、Mac OSにおいて、プログラミング上必要となってくる
パッケージをインストールしたりアンインストールしたり出来るシステムです。
このようなものをパッケージ管理システムと呼びます。
つまり、Homebrewを使えば、便利なアイテムのダウンロードが非常に簡単になってきます。

プログラミング入門者のための「Homebrew」インストールより引用
https://qiita.com/Naggi-Goishi/items/391b374305bc41b0d9f3

わかりやすい説明を引用させていただきました。
今回では`Docker`などのパッケージをインストールするのに便利なものだということです。

#### Homebrewのインストール
`Homebrew`のホームページを開くと
https://brew.sh/index_ja

![スクリーンショット 2020-09-08 16.44.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701603/d444e027-3877-24cb-f022-0735d69bc036.png)

という風になっており、「Install Homebrew」の下にあるコマンドをターミナルにコピペするとインストールできます。

### Dockerとは何ぞや
>Docker（ドッカー）は、コンテナ仮想化を用いてアプリケーションを開発・配置・実行するためのオープンソースソフトウェアあるいはオープンプラットフォームである

Wikipedia「Docker」より引用
https://ja.wikipedia.org/wiki/Docker

初心者には難しく、私も概念を完全に理解できているわけではありませんが、仮想環境を作ることでPostgresqlなどをサクサク実行できるということです。

#### Dockerのインストール
Docker公式サイトからDockerのアカウントを作り、Dockerをインストールしてください。
https://hub.docker.com/editions/community/docker-ce-desktop-mac

右上のところにクジラのマークが表示されれば成功です。

### Postgresqlを開こう
無事`Docker`と`Homebrew`がインストールできた後はいよいよ`Postgresql`を開きます。
1.まずターミナルを開いて
`docker login`
と打ち込み、Dockerにログインします。
2.
`docker pull postgres`
でpostgresqlをインストールします。
3.
`docker run --name dev-dash-postgres -e POSTGRES_USER=ユーザー名 -e POSTGRES_PASSWORD=パスワード -p ポート名（初期値だと5432:5432） -d postgres`
でDockerを起動します。
4.
`psql -h localhost -U ユーザー名`
でPostgresqlに接続します。

ユーザー名、パスワード、ポート名は自身のものを打ち込んでください。

Dockerがインストールされていなかったりすると実行できないこともあるので注意です。

## さあPostgresqlを始めよう
これからより実用的な話に入る前に、Postgresqlの基本原則をお伝えします。
`文章を書いたあとには基本的に「;」を絶対につけてください。`これなしでは反応しません。
初歩的すぎるからなのかわかりませんが、これを教えてくれる記事が少なかった、、、。気をつけてください。

それではこれから
初歩的なコマンド
`CREATE TABLE`
`SELECT`
`INSERT`
を紹介していきます。

## Postgres覚えておくべき用語
家を例に説明します。

データベース＝`家`。色んなものが入っている場所。
スキーマ＝`部屋`。自室、倉庫など。データベースよりも小さな括り。
テーブル=`タンス`。洋服が入っている場所など。スキーマよりも小さな括り。
カラム＝`タンスの引き出し`。下着が入っている引き出しなど。テーブルよりも小さな括り。
データ＝`洋服`。特定の下着、特定のシャツ。

## CREATE TABLE
用語を理解するのに最適な`「CREATE TABLE」`（テーブルを作る）というコマンドを説明いたします。

```Postgresql:Begginer.sql
CREATE TABLE souko.tansu{スキーマ名.テーブル名} （pants varchar, shirts varchar）;{カラム名＋データ型}
```

下記のように打ち込みます。

![スクリーンショット 2020-09-08 14.25.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701603/5b1d8435-cce5-8cd0-1d05-109438b06d01.png)

この文頭の`beginner`=#の`beginner`がデータベース（家）です。
`souko（スキーマ）`に`tansu`というテーブルを作るという形です。
`pants,shirts（タンスの引き出し）`というカラムをテーブルの中に作ります。

この後の`SELECT`、`INSERT`でさらに理解を深めていきましょう。
## SELECT
Postgresqlで一番使うことになるコマンド「SELECT」をご紹介します。
簡単に言うと「検索」です。
テーブルの中にあるデータを検索したいときに使います。

```Postgresql:Begginer.sql
SELECT * FROM （スキーマ名.）テーブル名;
```

ここのアスタリスクは`全て`を意味します。指定したテーブルの中にあるデータの全てを出したいときには「*」を使用します。

全てではなく、特定のものだけを検索したいときには、`カラム名`（引き出し）をSELECTの後に入れます。

これもわかりやすく、先ほどの家を例に出しますと、

```Postgresql:Begginer.sql
SELECT pants FROM souko.tansu;
```

といった形です。

この例えですと、「自分で部屋の中ひっくり返したらすぐ見つかるじゃないか」と思う方がいらっしゃるかもしれませんが、データベースというのは数億件のデータを管理したりもするものです。

数億の服が散らばった部屋の中から欲しい服を取り出すのは、無理です。
## INSERT
これもめちゃ使うことになるコマンド「INSERT」。
簡単にいうと「タンスに服入れる（テーブルにデータを入れる）」です。

```Postgresql:Begginer.sql
INSERT INTO (スキーマ名.)テーブル名(カラム名,カラム名,、、、) values（データ1,データ2,、、、）;
```

これを家の例で例えると

```Postgresql:Begginer.sql
INSERT INTO souko.tansu(pants, shirts) values('red_pants', 'red_shirts');
```

という風になります。
これはパンツを入れる引き出しに赤のパンツを入れ、シャツを入れる引き出しに赤のシャツを入れるという意味です。

同じく`blue_pants,blue_shirts`を入れて、tansu内の全てをSELECTをするとこのようになります。

![スクリーンショット 2020-09-08 18.23.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701603/556b1d63-cf13-44d8-d0a4-27e5f9d85dfb.png)

パンツの引き出しだけを見たい時は

```Postgresql:Begginer.sql
SELECT pants FROM souko.tansu;
```

と打ち込みます。すると

![スクリーンショット 2020-09-08 18.26.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701603/1f4b5e5f-375e-a85a-db26-72fe5df48d3f.png)

と出て何のパンツが入っているかを見ることができます。



## エラーが出たとき
エラーが出たときはエラーの文言を読んでみて、それでもわからなかった時には文言をコピペしてGoogleで調べましょう。
ただ超初心者だとそれでもよくわからないことの方が多いと思います。そういう時は、どこかしらにエラーがあるのでじっくりと全てを見直していきましょう。
とはいえ、、、。

## 初心者にエラーは地獄
エラーのキツいポイントとして、文言がミスを正しく指摘してくれているわけではないということです。
あくまで例ですが、
`Error:そのタンスの中に服無いよ`
というエラーが出ているにも関わらず、そのタンス（テーブル）に服（データ）が入っているということがあります。そのような場合は、タンスの場所であったり、タンスを作るときに何かしらのミスが発生しているなどの問題があり、初心者は理解できないことの方が多いです。
私は一つのエラーを調べるのに1日かかったことがあります。（先輩に聞いたら2分で解決してくれました、、、。）
初心者のうちは自分で調べることも大事ですが、本当にわからないときは先輩に聞くというのが、自分にとっても会社にとっても良いと思います。

## 初心者あるあるのミス
### セミコロン忘れ
文末に「;」を入れるのを忘れているというのは初心者にはよくあるミスだと思います。
コマンド打ち込んだのに何も実行されない、、、。という場合はとりあえずセミコロンが付いているかどうかを確認してください。
### パソコン再起動したらPostgres入れないなぜ、、、
パソコンを一度シャットダウンするとDockerから抜けてしまいます。
この場合にはDockerを再起動する必要があります。
`Docker start コンテナ名`
コンテナ名がわからない場合は
`Docker ps -a`
で調べられます。
## まとめ
初心者系の記事でも説明を省いている記事も多いので、超初心者向けとして必要以上にたくさん書きました。
超初心者のほとんどは何となく難しそうだなという印象を抱いていると思いますが、一週間くらいである程度慣れてくると思うので毛嫌いせずに頑張ってください。