Windows と macOS に EnterpriseDB 版の PostgreSQL をインストールする

Heroku Postgres をいじり始めたが、ローカル開発環境にも PostgreSQL 環境が欲しいので、Windows と Mac それぞれで PostgreSQL をインストールしてみる。

Windows なら Chocolatey、Mac なら Homebrew からも PostgreSQL がインストールできるが、ウィザード形式で簡単にインストールができるので、PostgreSQL の公式サイトで紹介されている EnterpriseDB 版を使用してみる。

(調べた感じ、Homebrew で落とせる PostgreSQL のバージョンが少し古そうだったのと、インストール後の設定が面倒臭そうだったので、Windows 版で試したことがあった、このインストーラ版を利用することにした)

目次

インストーラをダウンロードする

まずは公式サイトからインストーラをダウンロードする。

それぞれの OS のページから「Download the installer」リンクを押し、PostgreSQL v11 のインストーラをダウンロードする。

というファイル名だった (v11.1.1 が本稿執筆時点の最新版)。

ウィザードに従ってインストールする

ダウンロードしたファイルを開いてインストーラを起動する。質問される内容は以下のとおり。

ウィザードの内容は Windows・Mac ともに同じ。

環境変数を設定する

Windows の場合は「システム詳細設定」の「環境変数」にて、Mac の場合は ~/.bash_profile1 にて、それぞれ PostgreSQL の環境変数を PATH に追加する。

このようにすると、ターミナルから PostgreSQL に接続するための psql コマンドが使えるようになった。

# デフォルトの postgres ユーザでログインする
$ psql -U postgres

# パスワードを尋ねられるので入力する

Mac のみ : SQL Shell (psql).app を使ってみる

インストールが完了すると、Applications/ 配下に PostgreSQL 11/ ディレクトリができている。SQL Shell (psql).app を開くと psql コマンドと同等の処理ができる。

$ /Library/PostgreSQL/11/scripts/runpsql.sh; exit
Server [localhost]: 
Database [postgres]: 
Port [5432]: 
Username [postgres]:  # ココまでは未入力のまま Enter で進める
Password for user postgres: 【パスワードを入れる】
psql (11.0)
Type "help" for help.

# DB 接続できた。試しにデータベース一覧を見てみる
postgres=# \l
                             List of databases
   Name    |  Owner   | Encoding  | Collate | Ctype |   Access privileges   
-----------+----------+-----------+---------+-------+-----------------------
 postgres  | postgres | SQL_ASCII | C       | C     | 
 template0 | postgres | SQL_ASCII | C       | C     | =c/postgres          +
           |          |           |         |       | postgres=CTc/postgres
 template1 | postgres | SQL_ASCII | C       | C     | =c/postgres          +
           |          |           |         |       | postgres=CTc/postgres
(3 rows)

ココで初めて気付いたのだが、Windows ではデフォルトのデータベースのエンコーディングが「UTF8」になっていたのに、Mac では「SQL_ASCII」になっていた。以下のような update 構文でエンコーディングを修正できる。

postgres=# update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'postgres';
postgres=# update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'template0';
postgres=# update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'template1';

# 再確認。Encoding が UTF8 になった
postgres=# \l
                             List of databases
   Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges   
-----------+----------+----------+---------+-------+-----------------------
 postgres  | postgres | UTF8     | C       | C     | 
 template0 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
 template1 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
(3 rows)

# 試しに DB を作る
postgres=# CREATE DATABASE my_local_db;

# ちゃんと UTF8 になった
postgres=# \l
                              List of databases
    Name     |  Owner   | Encoding | Collate | Ctype |   Access privileges   
-------------+----------+----------+---------+-------+-----------------------
 my_local_db | postgres | UTF8     | C       | C     | 
 postgres    | postgres | UTF8     | C       | C     | 
 template0   | postgres | UTF8     | C       | C     | =c/postgres          +
             |          |          |         |       | postgres=CTc/postgres
 template1   | postgres | UTF8     | C       | C     | =c/postgres          +
             |          |          |         |       | postgres=CTc/postgres

以上

コレでローカルの PostgreSQL の環境準備は OK だ。今度はこの PostgreSQL 環境に Node.js スクリプトから接続してみようと思う。

参考