Railsにpostgresqlを導入する

今までRailsのデータベースにmySQLを使用してきましたが
herokuを使うにあたりRailsでpostgreSQLを導入する
手順をまとめました。

$がついてるコマンドはターミナル上で実行してください。

## postgreSQLのインストール
```
$ brew install postgresql
```

## バージョンの確認
```
$ psql -V
psql (PostgreSQL) 11.5
```

## データベースの初期化
```
$ initdb /usr/local/var/postgres -E utf8
The files belonging to this database system will be owned by user "username".
This user must also own the server process.

The database cluster will be initialized with locale "ja_JP.UTF-8".
initdb: could not find suitable text search configuration for locale "ja_JP.UTF-8"
The default text search configuration will be set to "simple".

Data page checksums are disabled.

initdb: directory "/usr/local/var/postgres" exists but is not empty
If you want to create a new database system, either remove or empty
the directory "/usr/local/var/postgres" or run initdb
with an argument other than "/usr/local/var/postgres".
```

## Postgresのバージョンチェック
```
$ postgres --version
postgres (PostgreSQL) 11.5
```

## PostgresSQLの起動
```
$ postgres -D /usr/local/var/postgres
2019-08-29 23:50:34.469 JST [22297] LOG:  listening on IPv6 address "::1", port 5432
2019-08-29 23:50:34.469 JST [22297] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2019-08-29 23:50:34.471 JST [22297] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2019-08-29 23:50:34.498 JST [22298] LOG:  database system was shut down at 2019-08-29 23:27:02 JST
2019-08-29 23:50:34.519 JST [22297] LOG:  database system is ready to accept connections
```
この時のIPv4 address "127.0.0.1"はローカル・ループバック・アドレスと呼ばれる
localhostのアドレスの実態がこれ。

## データベースの確認
ターミナル上で
commant + T (新しいタブ）
もしくは
command + N （新しいウィンドウ）
で別のターミナルを開き、下記のコマンドでデータベースを確認する

```
$ psql -l
                                         List of databases
   Name    |      Owner       | Encoding | Collate | Ctype |           Access privileges           
-----------+------------------+----------+---------+-------+---------------------------------------
 postgres  | username         | UTF8     | C       | C     | 
 template0 | username         | UTF8     | C       | C     | =c/username                  +
           |                  |          |         |       | username=CTc/username
 template1 | username         | UTF8     | C       | C     | =c/username                  +
           |                  |          |         |       | username=CTc/username
(3 rows)
```
３つのデータベースが作られているのが確認できる。


## postgresを終了させる
```
ターミナル上で control + c
```

## パスを通す
Postgresを簡単に起動できるようにパスを通す

```
$ vi ~/.bash_profile
上記コマンドでvimに入って、「i」でインサートモードにする
export PGDATA=/usr/local/var/postgres
を追記する
escでインサートモードを終了
:wqで変更を保存してvimを終了
```

上の流れは

```
$ echo 'export PGDATA=/usr/local/var/postgres' >> ~/.bash_profile
```
で同じことをしたことになる。

## 変更した.bash_profileを読み込む

```
$ source ~/.bash_profile
```

## パスを通した状態での起動を確認する

```
$ postgres
```

## 接続を確認
ターミナル上で
commant + T (新しいタブ）
もしくは
command + N （新しいウィンドウ）
で新しいターミナルから接続を確認する

```
$ psql -d postgres
```


# ここからRails

```
$ cd projects
$ rails new <アプリの名前＞ -d postgresql
$ cd <アプリの名前＞
$ rails db:create
$ rails s
```

http://localhost:3000/
にアクセスするとYay!がみれ・・・ない。

```
PG::ConnectionBad (could not connect to server: No such file or directory
	Is the server running locally and accepting
	connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
```
エラーが発生している様子。

解消するために、brew経由でインストールしたpostgreを再起動させる

```
$ brew services start postgresql
$ brew services stop postgresql
$ brew services restart postgresql
```

Railsを起動させる

```
$ rails s
```

データベースがないとのエラーが発生。

```
ActiveRecord::NoDatabaseError (FATAL:  database “アプリ名” does not exist
```

なので、データベースを作り押して再度Rails起動

```
$ rails db:create
$ rails s
```
http://localhost:3000/
これでYay!が見れるようになった！


## 参考
https://qiita.com/longtime1116/items/9045717ff8607bed07fe
https://make-from-scratch.com/error-connections-on-unix-domain-socket-tmp-s-pgsql-5432/