Corredor

ウェブ、プログラミングの勉強メモ。

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 のインストーラをダウンロードする。

  • Windows の場合は postgresql-11.1-1-windows-x64.exe
  • Mac の場合は postgresql-11.1-1-osx.dmg

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

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

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

  • インストール先 : デフォルトのままで OK
  • インストール内容 : デフォルトのままで OK
  • データディレクトリ : デフォルトのままで OK
  • パスワード : 初期ユーザとして postgres ユーザが作られるので、このユーザのパスワードを決める。ユーザ名と同じ postgres でもなんでも適当に決める
  • ポート : デフォルトの 5432 のままで OK
  • ロケール : Windows においてエンコーディングの問題などが起こるようなので、「C」を選択するのが良いらしい。Mac でも「C」を選択した。

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

環境変数を設定する

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

  • Windows : C:\Program Files\PostgreSQL\11\bin;【PATH】
  • Mac : export PATH=/Library/PostgreSQL/11/bin:$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 スクリプトから接続してみようと思う。

参考

PostgreSQL全機能バイブル

PostgreSQL全機能バイブル