rubytomato's “Getting Started”

Webアプリケーション開発の入門的な記事を投稿していきます。

Windows 10にPostgreSQL 12をインストーラを使わずにZipファイルからインストールする

はじめに

ローカルPCに開発用途のPostgreSQL 12をインストールする方法を説明します。インストール方法には、インストーラ(ファイルの拡張子がexe)を使う方法と、zipファイルを使う方法があります。通常はインストーラでインストールする方が簡単ですが、この記事ではzipファイルを使って手動でインストールする方法を説明したいと思います。

zipファイルでインストールするメリット

  • レジストリを更新しないので、アンインストールはファイル削除だけで済む。
  • 複数の異なるバージョンのPostgreSQLをインストールすることが簡単。

この記事ではWindows 10 64bitに、2020年3月現在で最新バージョンのPostgreSQL 12.2をインストールします。

PostgreSQLのダウンロード

ダウンロードページ ( PostgreSQL: Windows installers ) からzipファイル (postgresql-12.2-1-windows-x64-binaries.zip) をダウンロードします。Fig1の赤い枠線で囲った"zip archive"というリンクテキストをクリックします。

f:id:rubytomato:20200325010637p:plain
Fig1.

Fig2の赤い枠線で囲った"Win x86-64"というボタンをクリックするとzipファイルのダウンロードが始まります。

f:id:rubytomato:20200325010703p:plain
Fig2.

以上でPostgreSQLのダウンロードは完了です。

PostgreSQLのインストール

インストールと言ってもダウンロードしたzipファイルを7-Zipなどのツールで展開するだけです。 この記事では展開して出来たフォルダを以下のフォルダへコピーしました。以降はこのフォルダをインストールディレクトリと呼びます。

C:\dev\pgsql-12.2

このフォルダをWindowsエクスプローラで表示してFig3のような状態であることを確認します。

f:id:rubytomato:20200325010722p:plain
Fig3.

ユーティリティコマンド

インストールディレクトリ直下のbinディレクトリには、ユーティリティコマンドと呼ばれるコマンドが含まれています。たとえばデータベースを作成するcreatedb.exeコマンド、ユーザーを作成するcreateuser.exeコマンドなどです。 この記事では、データベースおよびユーザーの作成はこれらのユーティリティコマンドで行います。(データベースやユーザーの作成はSQLコマンドでも行えます)

pgAdmin 4

インストールディレクトリ直下のpgAdmin 4ディレクトリにPostgreSQLデータベース用のGUI管理ツールが同梱されています。下記の場所にあるpgAdmin4.exeを実行すると起動することができます。

C:\dev\pgsql-12.2\pgAdmin 4\bin\pgAdmin4.exe

初期設定

フォルダの作成

PostgreSQLのインストールディレクトリ直下にdata、logsフォルダを作成します。 以下のようにフォルダが出来ていればOKです。

C:\dev\pgsql-12.2\data
C:\dev\pgsql-12.2\logs

データベースクラスター(Database Cluster)の作成

PostgreSQLではディスク上のデータベースストレージ領域をデータベースクラスターと呼び、最初に初期化する必要があります。 データベースクラスターを初期化するにはinitdbコマンドまたはpg_ctlコマンドを使用します。この記事ではpg_ctlコマンドでデータベースクラスターを作成します。※以降のコマンドプロンプトからのコマンド実行は、断りが無い限りPostgreSQLのインストールディレクトリから行います。

-Uオプションでスーパーユーザーに任意の名前を付けることができますが、PostgreSQLの慣習ではpostgresという名前を付けるのが一般的なのでそのようにしています。

bin\pg_ctl initdb -D "C:/dev/pgsql-12.2/data" -o "-A password -W -U postgres -E UTF8 --no-locale"

実行結果

途中でスーパーユーザー(postgres)のパスワードを決めるように求められますので入力します。メッセージの最後の方に"成功しました。以下のようにしてデータベースサーバを起動することができます:" と出力されればデータベースクラスターの作成は完了です。

データベースシステム内のファイルの所有者はユーザ"<Windowsのユーザー名>"となります。
このユーザをサーバプロセスの所有者とする必要があります。

データベースクラスタはロケール"C"で初期化されます。
デフォルトのテキスト検索構成は english に設定されます。

データベージのチェックサムは無効です。

新しいスーパユーザのパスワードを入力してください: <postgresのパスワード>
再入力してください: <postgresのパスワード>

ディレクトリC:/dev/pgsql-12.2/dataの権限を設定しています ... ok
サブディレクトリを作成しています ... ok
動的共有メモリの実装を選択しています ... windows
デフォルトのmax_connectionsを選択しています ... 100
デフォルトの shared_buffers を選択しています ... 128MB
selecting default time zone ... Asia/Tokyo
設定ファイルを作成しています ... ok
ブートストラップスクリプトを実行しています ... ok
ブートストラップ後の初期化を実行しています ... ok
データをディスクに同期しています ... ok

成功しました。以下のようにしてデータベースサーバを起動することができます:

    C:/dev/pgsql-12.2/bin/pg_ctl -D C:/dev/pgsql-12.2/data -l ログファイル start

オプションの意味

オプション 意味
-D C:/dev/pgsql-12.2/data データベースクラフターのデータディレクト
-A password ユーザーのデフォルトの認証方法
-W スーパーユーザーのパスワードを要求する
-U postgres スーパーユーザーの名前
-E UTF8 テンプレートデータベースのエンコーディング
--no-locale デフォルトのロケール. --no-locale--locale=Cと同様

データベースの起動

データベースクラスターの作成が完了したらデータベースを起動させることができます。データベースの起動はpg_ctl startコマンドで行います。-Dオプションでデータディレクトリのフルパス、-lオプションでログファイルのフルパスを指定します。

bin\pg_ctl start -D "C:/dev/pgsql-12.2/data" -l "C:/dev/pgsql-12.2/logs/postgresql.log"

実行結果

サーバの起動完了を待っています....完了
サーバ起動完了

postgresユーザーで接続する

データベースが起動したら、postgresユーザーで接続できることを確認します。接続にはクライアントツールのpsqlコマンドを使用します。-hオプションで接続先のホスト名、-Uオプションで接続するユーザー名、-dオプションで接続するデータベース名を指定します。

bin\psql -h localhost -U postgres -d postgres
ユーザ postgres のパスワード: <postgresユーザーのパスワード>
psql (12.2)
"help"でヘルプを表示します。

postgres=#

バージョンの確認

select version();でバージョンを確認できます。

postgres=# select version();
                          version
------------------------------------------------------------
 PostgreSQL 12.2, compiled by Visual C++ build 1914, 64-bit
(1 行)

データベース一覧を表示

\lメタコマンドを実行すると、データベースの一覧を表示します。データベースクラスター作成直後の状態を確認します。(※メタコマンドについては後ほど簡単に触れます。)

postgres=# \l
                                        データベース一覧
   名前    |  所有者  | エンコーディング | 照合順序 | Ctype(変換演算子) |     アクセス権限
-----------+----------+------------------+----------+-------------------+-----------------------
 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 行)

終了する場合は\qメタコマンドかexitと入力してenterを押下します。

データベースのステータスの確認

データベースのステータスはpg_ctl statusコマンドで確認できます。

bin\pg_ctl status -D "C:/dev/pgsql-12.2/data"

起動中のステータス

pg_ctl: サーバが動作中です(PID: 5852)
C:/dev/pgsql-12.2/bin/postgres.exe "-D" "C:/dev/pgsql-12.2/data"

停止中のステータス

pg_ctl: サーバが動作していません

データベースの停止

データベースの停止はpg_ctl stopコマンドで行います。

bin\pg_ctl stop -D "C:/dev/pgsql-12.2/data"

実行結果

サーバ停止処理の完了を待っています....完了
サーバは停止しました

メタコマンド

PostgreSQLにはメタコマンドという\から始まるコマンドが用意されています。メタコマンドの種類は\?というメタコマンドで確認できます。 よく使うメタコマンドにテーブル、ビュー、シーケンスを一覧表示する\d、データベースを一覧表示する\lがあります。その他に下記に3つほど使用例をあげました。

別のデータベースへ接続する

接続中のpostgresユーザーから、sample_userユーザーでsample_dbデータベースへ接続します。

\c sample_db sample_user

接続情報

\conninfo
データベース"postgres"にユーザ"postgres"として、ホスト"localhost"(アドレス"::1")上のポート"5432"で接続しています。

クライアントのエンコーディング

\encoding
SJIS

ユーザーの作成

postgresユーザーはスーパーユーザーつまり管理者権限を持つユーザーなので、管理操作以外で使用するための一般ユーザーを作成します。 この例ではcreateuserコマンドでsample_userというユーザーを作成します。-Uオプションにはデータベースに接続するユーザーを指定します。この例ではpostgresユーザーを指定しています。

bin\createuser -U postgres -W -P -e sample_user
新しいロールのためのパスワード: <sample_userのパスワード>
もう一度入力してください:<sample_userのパスワード>
パスワード: <postgresのパスワード>
SELECT pg_catalog.set_config('search_path', '', false);
CREATE ROLE sample_user PASSWORD 'md5c326ab35c9353dd34801ecd7ab7b1d76' NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;

データベースの作成

createdbコマンドでsample_userユーザーがオーナーのsample_dbデータベースを作成します。-Oオプションでデータベースのオーナーになるユーザーを指定、-Uオプションにはデータベースに接続するユーザーを指定します。この例ではpostgresユーザーを指定しています。

bin\createdb -O sample_user -U postgres -W -l Japanese_Japan.932 -T template0 -e sample_db

実行結果

パスワード: <postgresのパスワード>
SELECT pg_catalog.set_config('search_path', '', false);
CREATE DATABASE sample_db OWNER sample_user TEMPLATE template0 LC_COLLATE 'Japanese_Japan.932' LC_CTYPE 'Japanese_Japan.932';

データベースの削除

作成したデータベースを削除はdropdbコマンドで行います。以下はsample_dbデータベースを削除する例です。

bin\dropdb -U postgres -W -e sample_db

実行結果

パスワード: <postgresのパスワード>
SELECT pg_catalog.set_config('search_path', '', false);
DROP DATABASE sample_db;

起動・停止用のバッチファイルの作成

PostgreSQLサーバーの起動や停止を簡単に行うためにバッチファイルを作成します。バッチファイルを作成しておけば、以降の起動や停止はバッチファイルを実行するだけで行えるようになります。

起動用

インストールディレクトリ直下にstartup.batという名前のファイルを作成します。

C:\dev\pgsql-12.2\startup.bat

startup.batをテキストエディタで開き、以下の内容をコピーしてペーストします。

rem 起動用
C:\dev\pgsql-12.2\bin\pg_ctl start -D "C:/dev/pgsql-12.2/data" -l "C:/dev/pgsql-12.2/logs/postgresql.log"

pause

停止用

インストールディレクトリ直下にshutdown.batという名前のファイルを作成します。

C:\dev\pgsql-12.2\shutdown.bat

shutdown.batをテキストエディタで開き、以下の内容をコピーしてペーストします。

rem 停止用
C:\dev\pgsql-12.2\bin\pg_ctl stop -D "C:/dev/pgsql-12.2/data"

pause

postgresユーザー接続用

インストールディレクトリ直下にpostgres_user.batという名前のファイルを作成します。

C:\dev\pgsql-12.2\postgres_user.bat

postgres_user.batをテキストエディタで開き、以下の内容をコピーしてペーストします。

rem postgresユーザーでログイン
C:\dev\pgsql-12.2\bin\psql -U postgres -d postgres

テーブルの作成

作成したsample_userで接続しsample_dbデータベースにtodoテーブルを作成します。

bin\psql -U sample_user -d sample_db
ユーザ sample_user のパスワード: <sample_userのパスワード>
psql (12.2)
"help"でヘルプを表示します。

sample_db=>

以下のSQL文を実行してテーブルとシーケンスを作成します。

CREATE TABLE IF NOT EXISTS todo (
  id BIGSERIAL NOT NULL,
  title VARCHAR(255) NOT NULL,
  description VARCHAR(1024) NULL,
  done BOOLEAN DEFAULT FALSE NOT NULL,
  create_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL,
  update_at TIMESTAMP WITHOUT TIME ZONE NULL,
  PRIMARY KEY (id)
);

データの登録

INSERT INTO todo (title) VALUES ('買い物に行く')
, ('部屋の掃除')
, ('犬の散歩')
, ('ブログを書く')
, ('JavaScriptの勉強')
;

PostgreSQLの再インストール

なんらかの理由でPostgreSQLの環境をリセットして再作成したい場合は、以下のフォルダをWindowsエクスプローラで削除し、『初期設定』の『フォルダの作成』からやり直します。 ※dataフォルダも削除するので、それまで作成したデータがそのまま消えてしまう点に注意してください。

C:\dev\pgsql-12.2\data
C:\dev\pgsql-12.2\logs

PostgreSQLのアンインストール

PostgreSQLのインストールディレクトリをWindowsエクスプローラで削除します。

C:\dev\pgsql-12.2

補足

参考情報