【Mac】PostgreSQLのインストール（Homebrew）

MacにPostgreSQLを直接インストールする機会が稀にあるため、その手順をメモとして残しておきます。

# インストール（Homebrew）

インストールできる候補を確認します。

```bash
% brew search postgresql
==> Formulae
postgresql@10          postgresql@12          postgresql@14          postgresql@16          postgrest
postgresql@11          postgresql@13          postgresql@15          qt-postgresql

==> Casks
navicat-for-postgresql                                    posture-pal

If you meant "postgresql" specifically:
postgresql breaks existing databases on upgrade without human intervention.

See a more specific version to install with:
  brew formulae | grep postgresql@
```

PostgreSQLをインストールします。今回はバージョン14をインストールしました。

```bash
% brew install postgresql@14
==> Downloading https://formulae.brew.sh/api/formula.jws.json
############################################################################################################ 100.0%
==> Downloading https://formulae.brew.sh/api/cask.jws.json
############################################################################################################ 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/postgresql/14/manifests/14.11_1
Already downloaded: /Users/k-abe/Library/Caches/Homebrew/downloads/cc5ce32be3ad755d6853a306c7d20db8221cceaa63708acb1937567a4ab65fda--postgresql@14-14.11_1.bottle_manifest.json
==> Fetching postgresql@14
==> Downloading https://ghcr.io/v2/homebrew/core/postgresql/14/blobs/sha256:d49e8b487d6b7e696e74ebf7d0bddbb9b8c343d
Already downloaded: /Users/k-abe/Library/Caches/Homebrew/downloads/695bc5763b3ab3f65140681669c474e2b18ff40d6ff809534e5436f2105b6d90--postgresql@14--14.11_1.arm64_sonoma.bottle.tar.gz
==> Pouring postgresql@14--14.11_1.arm64_sonoma.bottle.tar.gz
==> Caveats
This formula has created a default database cluster with:
  initdb --locale=C -E UTF-8 /opt/homebrew/var/postgresql@14
For more details, read:
  https://www.postgresql.org/docs/14/app-initdb.html

To start postgresql@14 now and restart at login:
  brew services start postgresql@14
Or, if you don't want/need a background service you can just run:
  /opt/homebrew/opt/postgresql@14/bin/postgres -D /opt/homebrew/var/postgresql@14
==> Summary
🍺  /opt/homebrew/Cellar/postgresql@14/14.11_1: 3,319 files, 46MB
==> Running `brew cleanup postgresql@14`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
```

インストールできる候補を確認するとすでにインストール済みのものには✓が入ります。

```bash
% brew search postgresql    
==> Formulae
postgresql@10          postgresql@12          postgresql@14 ✔        postgresql@16          postgrest
postgresql@11          postgresql@13          postgresql@15          qt-postgresql

==> Casks
navicat-for-postgresql                                    posture-pal

If you meant "postgresql" specifically:
postgresql breaks existing databases on upgrade without human intervention.

See a more specific version to install with:
  brew formulae | grep postgresql@
```

PostgreSQLコマンドでバージョンを確認すると14.11が入っていました。

```bash
% psql --version
psql (PostgreSQL) 14.11 (Homebrew)
```

# サービスの起動

PostgreSQLのデータベースをサービスとして起動します。これにより、オペレーティングシステムを再起動してもPostgreSQLは自動的に起動されます。

```bash
% brew services start postgresql@14
==> Successfully started `postgresql@14` (label: homebrew.mxcl.postgresql@14)
```

サービスの起動状態を確認すると実行中です。

```bash
% brew services list
Name          Status  User  File
postgresql@14 started k-abe ~/Library/LaunchAgents/homebrew.mxcl.postgresql@14.plist
```

以下のコマンドでサービスを停止することもできます。

```bash
% brew services stop postgresql@14
Stopping `postgresql@14`... (might take a while)
==> Successfully stopped `postgresql@14` (label: homebrew.mxcl.postgresql@14)
```

サービスの起動状態を確認するとPostgreSQLの14はnoneとなっています。

```bash
% brew services list              
Name          Status User File
postgresql@14 none        
```

# コマンドラインからデータベースに接続

データベースの一覧は以下のコマンドで確認します。

```bash
 psql -l                         
                          List of databases
   Name    | Owner | Encoding | Collate | Ctype |  Access privileges  
-----------+-------+----------+---------+-------+---------------------
 postgres  | k-abe | UTF8     | C       | C     | 
 template0 | k-abe | UTF8     | C       | C     | =c/"k-abe"         +
           |       |          |         |       | "k-abe"=CTc/"k-abe"
 template1 | k-abe | UTF8     | C       | C     | =c/"k-abe"         +
           |       |          |         |       | "k-abe"=CTc/"k-abe"
(3 rows)
```

データベースに接続するにはpsqlの後にデータベース名を指定します。

```bash
psql （データベース）
psql (14.11 (Homebrew))
Type "help" for help.

postgres=
```

DB接続を解除するには\dと入力します。

```bash
postgres= \q
%
```

:::note info
\ はコマンドキーと¥を同時に入力します
:::