本サイトではアフィリエイト広告を利用しています

Cygwin PC-UNIX Windows ソフトウェア データベース 設定

Cygwin で PostgreSQL を速攻セットアップする

2020年4月27日

このページでは Cygwin に PostgreSQL をセットアップして実行する手順を追っていきます。
フリーの DB としては、世間的(世界的)には MySQL(MariaDB)が有名ですが、私的には PostgreSQL の方が好きです。
統計ではオラクル(Oracle)と MySQL で全体の4割を占めていて、それに SQL Server を加えると全体の6割になるそうです。一方、PostgreSQL は全体の中で6%弱を占める程度で、DB 界の Apple といった感じでしょうか。
PostgreSQL の何が好きかと言えば、多機能さでしょうか。MySQL は徹底的にシンプルですので、しっかり動きますが、PostgreSQL はその多機能さが災いして、速度は少し劣るともされます。その反面、データをひたすら食わせて分析・解析するなどの分析系の使い勝手が良く、触り甲斐があるのがメリットです。

設定環境


CYGWIN_NT-10.0 PC 3.1.4(0.340/5/3) 2020-02-19 08:49 x86_64 Cygwin
postgres (PostgreSQL) 12.2
psql (PostgreSQL) 12.2

今回のミッション

  • PostgreSQL を Cygwin からセットアップする

今回のミッションの続きとして、セットアップした PostgreSQL を WordPress から使うことが次回の目標です。そのため、テストデータベースは WordPress でそのまま使います(といってもユーザー名とパスワードぐらいですけど)。
本記事のコマンドの赤太の文字の部分が、実際に打ち込むコマンドになります。

PostgreSQL を Cygwin でセットアップする手順

Cygwin PostgreSQL インストール
セットアップからインストールするのが簡単です。setup-x86_64.exe を起動してインストールする場合、上の赤枠のパッケージが必須になります。

本セットアップでは、Cygwin の /srv 以下に pgdata というデイレクトリを作って、その中にデータを置くようにします。

起動ファイルに /srv/pgdata の設定を書き込みます

直にコマンドを打ち込んで起動と停止を行う方法も開発環境としては大アリなのですが、PostgreSQL には起動スクリプトが用意されているので、これを利用できるようにしておきます。
スクリプトは "/etc/rc.d/init.d/postgresql" ですので、メモ帳などでこのファイルを直接開いて編集するか、作業は一部の書き換えに過ぎませんので、直接 vi で書き換えてしまいます。
(vi に馴染みのない方は Windows のメモ帳に直接ドラッグして書き換えましょう。)

 cygwin
$ cd /etc/rc.d/init.d
$ sed -i 's,PGDATA=/usr/share/postgresql/data,PGDATA=/srv/pgdata,g' postgresql

ここではエディタを起動するのももどかしいので横着して sed で書き換えました。
書き換え箇所は14行目あたり以下の通りです。

 
~(途中略)~
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
PREFIX=/usr
PGDATA=/srv/data
CONFIG=$PGDATA/postgresql.conf
PIDFILE=$PGDATA/postgresql.pid
LOGFILE=/var/log/postgresql.log
SOCKETDIR=/tmp
~(以下略)~

上の太赤文字の部分を書き換えるだけです。デフォルトでは "PGDATA=/usr/share/postgresql/data" になっていると思います。

重要〕PostgreSQL をサービスに登録します

Cygwin 管理者として実行

サービスに登録するには、Cygwin のコマンドプロンプトを Windows の管理者権限で起動する必要があります。
図のように、Windows のスタートメニューからプログラム「Cygwin」まで進んだら、Cygwin64 Terminal を右クリック、「その他」に進み「管理者として実行」をクリックします。
プロンプトが起動したら、以下のコマンドを打ち込んでサービス登録を行います。

 cygwin
$ cygserver-config
Overwrite existing /etc/cygserver.conf file? (yes/no) yes
Generating /etc/cygserver.conf file
Warning: The following function requires administrator privileges!
Do you want to install cygserver as service?
(Say "no" if it's already installed as service) (yes/no) yes
The service has been installed under LocalSystem account.
To start it, call net start cygserver' or cygrunsrv -S cygserver'.
Further configuration options are available by editing the configuration
file /etc/cygserver.conf.  Please read the inline information in that
file carefully. The best option for the start is to just leave it alone.
Basic Cygserver configuration finished. Have fun!

この作業は、PostgreSQL のメモリをしっかり確保するためにも必要ですので、間違いなく設定します。
Windows のサービスを触るので、Windows の管理者権限が必要だったと言うことになります。

次に、サービスを起動します。

 cygwin
$ cygrunsrv -S cygserver

ちなみに、上の作業をサボると、あとから以下のようなメモリエラーになります。


PostgreSQL 初期化エラー

PostgreSQL のデータベースを初期化します

 cygwin
$ cd /srv
$ mkdir pgdata
$ chmod 777 pgdata
$ /etc/rc.d/init.d/postgresql initdb
データベースシステム内のファイルの所有者はユーザ "Admin"となります。
このユーザをサーバプロセスの所有者とする必要があります。
データベースクラスタはロケール"C"で初期化されます。
デフォルトのデータベース符号化方式はそれに対応してSQL_ASCIIに設定されました。
デフォルトのテキスト検索構成は english に設定されます。
データベージのチェックサムは無効です。
ディレクトリ/srv/pgdataの権限を設定しています ... ok
サブディレクトリを作成しています ... ok
動的共有メモリの実装を選択しています ... posix
デフォルトのmax_connectionsを選択しています ... 20
デフォルトの shared_buffers を選択しています ... 128MB
selecting default time zone ... Asia/Tokyo
設定ファイルを作成しています ... ok
ブートストラップスクリプトを実行しています ... ok
ブートストラップ後の初期化を実行しています ... ok
データをディスクに同期しています ... ok
initdb: 警告: ローカル接続に対して"trust"認証を有効にします
pg_hba.confを編集する、もしくは、次回initdbを実行する時に -A オプション、
あるいは --auth-local および --auth-host オプションを使用することで変更する
ことがきます。
成功しました。以下のようにしてデータベースサーバを起動することができます:
    /usr/sbin/pg_ctl -D /srv/pgdata -l ログファイル start

上の chmod 777 pgdata は特に必要がないのですが、流れで楽する癖でやってしまっています。省いても問題ないはずです。

PostgreSQL の設定ファイルを準備します

PostgreSQL の設定はファイルは、3つばかり押さえておけば安全に運用できます。本記事では安全に運用することが目的ではなく、開発環境、試験環境の設定なので、使いやすさ扱いやすさ優先で設定していきます。

  • PostgreSQL の基本設定は postgresql.conf
  • 接続許可の設定(ファイル、ホスト単位) pg_hba.conf
  • OS とデータベースのユーザー名のマッピング設定は pg_ident.conf

デフォルトではデータベースをインストールしたルートディレクトリに、上の設定ファイルが置かれます。上の例のように作業を続けていれば、"/srv/pgdata" 以下に設定ファイルが作られています。Windows 的には C:\Cygwin64\srv\pgdata\postgresql.conf のファイルをメモ帳や EmEditor など、使い慣れたエディタで編集することができます。

デフォルトの postgresql.conf ファイルの128行目あたり、

 
shared_buffers = 128MB
work_mem = 4MB

となっていると思いますが、少なすぎますので 512MB 以上にはしておきましょう。
ちなみにLinux などで裸で動かすときは、shared_buffers にはシステムメモリの25%あたりを割り当てるのが奨励されています。
work_mem は PostgreSQL のプロセスが使用する並べ替え作業用のメモリバッファになります。Windows マシンのメモリが 4GB 以上あれば、8MB にしておきましょう。
エディタを使わず、sed で横着して書き換える場合は、以下のようにします。

 cygwin
$cd /srv/pgdata
sed -i  's,shared_buffers = 128MB,shared_buffers = 1024MB,g' postgresql.conf
sed -i  's,work_mem = 4MB,work_mem = 8MB,g' postgresql.conf

メモリ周りの微調整は PostgreSQL の醍醐味的なところでもあります。このフリーの PostgreSQL を商用運用するようなケースでは、ここの設定次第でパフォーマンスに大きく影響します。裏を返せば、メモリ周りの設定をうまく行えば、お金をかけずに高機能データベースを上手に運用することができます。

各設定ファイルのひな形は "/usr/share/postgresql" 以下に "postgresql.conf.sample" というような *.conf.sample というファイル名でインストールされます。興味のある方は、"C:\Cygwin64\usr\share\postgresql" あたりの Windows エクスプローラで探索すると面白いかもです。

PostgreSQL サーバーを起動してみます


 cygwin
$ /etc/rc.d/init.d/postgresql startlocal
Starting /usr/sbin/postmaster locally: chmod: '/srv/pgdata/postgresql.pid' にアクセスできま せん: No such file or directory
サーバの起動完了を待っています....完了
サーバ起動完了
done.

開発、テスト目的なので試験的にローカルで起動します。

PostgreSQL Windows Defender
PostgreSQL は TCP/IP 接続しますので、Wondows Defender の警告が出た場合は「許可」してあげてください。

PostgreSQL に データベースとユーザーを作成します

試験的には何のデータベースを作成してもいいのですが、ここで作成したデーベースをそのまま次回の WordPress 設定の時に使います。使うのはユーザー名とパスワードだけです。

 cygwin
$ /usr/bin/createdb testdb
$ psql -l
                                     データベース一覧
   名前    | 所有者 | エンコーディング | 照合順序 |(略)
-----------+--------+------------------+----------+(略)
 postgres  | grazie | SQL_ASCII        | C        |(略)
 template0 | grazie | SQL_ASCII        | C        |(略)
           |        |                  |          |(略)
 template1 | grazie | SQL_ASCII        | C        |(略)
           |        |                  |          |(略)
 testdb    | grazie | SQL_ASCII        | C        |(略)
(4 行)

作成したデータベース(testdb)に接続して、ユーザ "wpadmin" を作成し、パスワード "12345678" を設定します。

 cygwin
$ psql testdb
psql (12.2)
"help"でヘルプを表示します。
testdb=# CREATE USER wpadmin WITH PASSWORD '12345678';
CREATE ROLE
testdb=# SELECT * FROM pg_user;
testdb=# \q
$

SQL 文は最後に ";" を入れることを忘れないようにしましょう。

作成したデータベース

データベース名 : testdb
ユーザー名 : wpadmin
パスワード : 12345678

エラーが起きなければ、今回のミッションは完了です。


関連記事
Cygwin
Windows に Cygwin をセットアップする入門編

Cygwin は Windows 上で Linux ディストリビューションと同様の機能が使えるようにする、オープンソース ...

続きを見る


関連記事
Apache 設定
Cygwin で apache と PHP を速攻セットアップする

Cygwin を使って Apache を速攻セットアップする手順です。 本ページはこんな方におすすめ Windows 上 ...

続きを見る

-Cygwin, PC-UNIX, Windows, ソフトウェア, データベース, 設定
-, , ,