【PostgreSQL】一連の操作手順実例。インストール、起動、テーブル作成・削除、終了方法。

【PostgreSQL】一連の操作手順実例。インストール、起動、テーブル作成・削除、終了方法。

1. [PostgreSQLのインストール](#1-postgresqlのインストール)
1. [PostgreSQLの起動](#2-postgresqlの起動)
1. [Databaseの作成](#3-databaseの作成)
1. [指定したDBに移動](#4-指定したdbに移動)
1. [テーブルの作成](#5-テーブルの作成)
1. [テーブルの確認](#6-テーブルの確認)
1. [テーブルにデータを追加](#7-テーブルにデータを追加)
1. [データの更新](#8-データの更新)
1. [行の削除](#9-行の削除)
1. [テーブルの削除](#10-テーブルの削除)
1. [psqlの終了](#11-psqlの終了)


<br>
**▼補足**
No5, 7, 8, 9, 10は通常のSQL作業。その他はpostgreSQL専用のコマンド(psql)を使う。

SQLは末尾に`;`が必要。psqlは冒頭に`¥`をつける（末尾にセミコロンは不要）  


<br>
##1. PostgreSQLのインストール

PostgreSQL公式のダウンロードページにいく。
https://www.postgresql.org/download/macosx/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/b7052155-dc24-21b0-0ce7-807119555351.png)

**Download the Installer**をクリック。
https://www.enterprisedb.com/downloads/postgres-postgresql-downloads

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/ad59fcd2-6c37-4644-f0b9-bb2fa0367024.png)

該当するOSとインストールしたいバージョンをクリック。ここではMacの最新版(13.2)を指定。

ダウンロードが終わったらインストーラをダブルクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/6050b7b7-39e0-5d9d-f6a4-341f236eae2c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/2b84bec6-6705-f4bb-09b6-7458207f5d56.png)
ユーザー名とパスワードを入力。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/b178dbf2-2255-027a-b731-879c880b4401.png)


保存場所を選択。基本的にはデフォルトでOK。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/d9a5a408-dbb4-d7a2-7cd0-ef7e0d7f7a34.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/b1401de2-9880-ab74-339f-d58b819516cd.png)

スーパーユーザー（postgres, ルートユーザー)のパスワードを入力。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/67baadd6-8f7a-bf5f-f5d4-14e48452ef1d.png)

ポート番号を入力。デフォルトは5432。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/259996e9-84f9-edf8-5994-74d535d5ab7e.png)

言語を選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/75bdab3a-3d1f-31e8-64cc-9c56e9345d2c.png)

これまでの設定内容を確認して、問題なければNEXT。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/8bcd72ce-5779-ac4b-e2e8-e048c17a7294.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/7f185d47-e8b3-94bb-a082-c3ea22c2b641.png)


インストール開始。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/05ad5601-62da-208c-2871-5e0e32481b63.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/6e49bc03-a29f-8ab7-ee9c-060e60c873fa.png)

以上でPostgreSQLのインストールは完了。

Stack BuilderというPostgreSQLの追加ツールのインストールウィザードを起動するか確認が表示される。

後からでも追加できるので、チェックを外してFinishすればOK。


<br>
##2. PostgreSQLの起動
`which postgres`でPostgreSQLのパスを調べる。

```：パス調査
$ which postgres
/usr/local/bin/postgres
```

・起動コマンド：`postgres -D パス`

```:起動
$ postgres -D /usr/local/var/postgres
```

`-D` postgresプログラムのディレクトリを指定するオプション。


バックグラウンドで起動する場合は以下。

`$ postgres -D /usr/local/pgsql/data >logfile 2>&1 &`

[＞postgres公式](https://www.postgresql.jp/document/9.4/html/server-start.html)

<br>
###（補足）既に起動中の場合
以下が表示される場合は既に起動中。

```
$ postgres -D /usr/local/var/postgres
2021-04-02 15:38:48.277 JST [2351] LOG:  starting PostgreSQL 13.2 on x86_64-apple-darwin19.6.0, compiled by Apple clang version 12.0.0 (clang-1200.0.32.29), 64-bit
2021-04-02 15:38:48.278 JST [2351] LOG:  could not bind IPv6 address "::1": Address already in use
2021-04-02 15:38:48.278 JST [2351] HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2021-04-02 15:38:48.278 JST [2351] LOG:  could not bind IPv4 address "127.0.0.1": Address already in use
2021-04-02 15:38:48.278 JST [2351] HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2021-04-02 15:38:48.278 JST [2351] WARNING:  could not create listen socket for "localhost"
2021-04-02 15:38:48.278 JST [2351] FATAL:  could not create any TCP/IP sockets
2021-04-02 15:38:48.279 JST [2351] LOG:  database system is shut down
```

```:使用中のプロセス確認
$ sudo lsof -i:5432
Password:
COMMAND  PID     USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
postgres 130 postgres    7u  IPv6 0xe4c8eae1cbec68e1      0t0  TCP *:postgresql (LISTEN)
postgres 130 postgres    8u  IPv4 0xe4c8eae1cb44fbb1      0t0  TCP *:postgresql (LISTEN)
```

`lsof`はファイルを開くコマンド。`-i:ポート番号`オプションをつけると指定したポート番号で使用中のファイルのみを表示する。



<br>
##2. PostgreSQLへの接続
Postgreの起動コマンド：`psql -U postgres`

- `-U` ユーザー名を指定
- ユーザー名postgresはルートユーザー

```
$ psql -U postgres
Password for user postgres:
psql (13.2)
Type "help" for help.

postgres=#
```


###psqlとは？
PostgreSQLの略。対話モードに入るためのコマンド。
よく使うオプションは以下。デフォルト（指定がない場合は）カッコの値が適用される。

- `-U`: ユーザー名（PCのユーザー名）
- `-d`: データベス名
- `-h`: ホスト名（localhost）
- `-p`: ポート番号(5432)

```:
$ psql -U ユーザー名 -d データベース名 -h ホスト名 -p ポート番号 
```

初期のユーザー名はルートの`postgres`なので指定が必要。



<br>
##3. Databaseの作成
・`create database <DB名>`

```:mydbを作成
postgres=# create database mydb;
CREATE DATABASE
```

###DBの確認
・`\l`

```
postgres-# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 mydb      | postgres | EUC_JP   | ja_JP.eucJP | ja_JP.eucJP |
 postgres  | postgres | EUC_JP   | ja_JP.eucJP | ja_JP.eucJP |
 template0 | postgres | EUC_JP   | ja_JP.eucJP | ja_JP.eucJP | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | EUC_JP   | ja_JP.eucJP | ja_JP.eucJP | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
```

先ほど作成した、mydbが確認できる。
postgres, template0, template1はデフォルトで存在している。

DB作成時に指定がない場合はtempalte1の仕様をコピーして作成される。

- Encoding: エンコーディング
- Collate： 文字列並び替え順序
- Ctype: 文字分類

###ja_JP.eucJPとは？
Linuxの推奨される日本語文字コード（のロケール名称）


<br>
##4. 指定したDBに移動
・`¥c <データベース名>`

```:DB選択
postgres-# \c mydb
You are now connected to database "mydb" as user "postgres".

mydb=#
```

コマンド入力の前が`mydb=#`となり、移動に成功。


<br>
##5. テーブルの作成

・`create table <テーブル名> (<カラム名> <型>)`

- テーブル名は複数形


```
# create table users (name text, email text);
CREATE TABLE
```


<br>
##6. テーブルの確認
・`¥d`

```
mydb=# \d
         List of relations
 Schema | Name  | Type  |  Owner
--------+-------+-------+----------
 public | users | table | postgres
(1 row)
```

デフォルトでpublicが作成されている。


##7. テーブルにデータを追加 
usersテーブルの中に、nameとemailというカラムがあるので、ここにデータを挿入する。SQLを使用する。

・`insert into <テーブル名> values (<カラム１の値>, <カラム２の値>,,,)`

```
mydb=# insert into users values ('yamada', 'yamada@e-mail');
INSERT 0 1
```

データの確認。

```
mydb=# select * from users;
  name  |     email
--------+---------------
 yamada | yamada@e-mail
(1 row)
```

データが追加されていることを確認。



<br>
##8. データの更新
・`update <テーブル名> set <カラム名> = '値'`

```
mydb=# update users set name = 'tanaka';
UPDATE 1

#確認
mydb=# select * from users;
  name  |     email
--------+---------------
 tanaka | yamada@e-mail
(1 row)
```

nameカラムがyamadaからtanakaに変更された。


<br>
##9. 行の削除
・`delete from <テーブル名> where <条件>`

```
mydb=# delete from users where name = 'tanaka';
DELETE 1

#確認
mydb=# select * from users;
 name | email
------+-------
(0 rows)
```


<br>
##10. テーブルの削除
・`drop table <テーブル名>;`

```
mydb=# drop table users;
DROP TABLE
```

```
#確認1
mydb=# select * from users;
ERROR:  relation "users" does not exist

#確認２
mydb=# \d
Did not find any relations.
```

<br>
##11. psqlの終了
・`¥q`

```
mydb=# \q
$
```

以上。