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"というリンクテキストをクリックします。
Fig2の赤い枠線で囲った"Win x86-64"というボタンをクリックするとzipファイルのダウンロードが始まります。
以上でPostgreSQLのダウンロードは完了です。
PostgreSQLのインストール
インストールと言ってもダウンロードしたzipファイルを7-Zipなどのツールで展開するだけです。 この記事では展開して出来たフォルダを以下のフォルダへコピーしました。以降はこのフォルダをインストールディレクトリと呼びます。
C:\dev\pgsql-12.2
このフォルダをWindowsエクスプローラで表示して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
補足
参考情報