「Windows環境を汚したくないなぁ。そうだ!CygwinのPostgreSQLパッケージをインストールして動かそう」と思って作業をした備忘録になります。
サービス(デーモン)として動かすのではなく、Cygwin Terminalからコマンドで実行、操作、停止までの手順となります。
postgresユーザーなども作成せず、まずはCygwin上でPostgreSQlを動かして試したい。PostgreSQLをサービスに登録したくない!という人には役に立つかも!?
$ uname -r 3.1.2(0.340/5/3)
PostgreSQLはCygwinが提供しているパッケージをインストールしました。
インストール手順は、setup-x86_64.exe を起動して postgresql パッケージをインストールしました。
以下、Cygwin Terminal を起動し、PostgreSQLを起動するまでの手順となります。
cygserver-config
$ cygserver-config 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!cygserverをサービスに登録しないとPostgreSQLが起動しません&以下のようなエラーが表示されます。
$ /usr/sbin/initdb.exe -D $HOME/pgdata <snip> ブートストラップスクリプトを実行しています ... 2019-12-23 20:23:08.986 JST [994] FATAL: 共有メモリセグメントを作成できませんでした: Function not implemented 2019-12-23 20:23:08.986 JST [994] 詳細: 失敗したシステムコールはshmget(key=5432001, size=56, 03600)です。 子プロセスが終了コード1で終了しました <snip>
$ /usr/sbin/cygserver &以下のメッセージが表示されれば成功です。
cygserver: Initialization complete. Waiting for requests.
$ /usr/sbin/initdb -D $HOME/pgdata本記事では、ホームディレクトリ直下にデーベースを作成します。
$ /usr/sbin/initdb -D $HOME/pgdata データベースシステム内のファイルの所有者はユーザ"sakura"となります。 このユーザをサーバプロセスの所有者とする必要があります。 データベースクラスタはロケール"ja_JP.UTF-8"で初期化されます。 デフォルトのデータベース符号化方式はそれに対応してUTF8に設定されました。 initdb: could not find suitable text search configuration for locale "ja_JP.UTF-8" デフォルトのテキスト検索構成は simple に設定されます。 データベージのチェックサムは無効です。 ディレクトリ/home/sakura/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 /home/sakura/pgdata -l ログファイル start
/usr/sbin/pg_ctl -D $HOME/pgdata -l /tmp/postgresql.log startログは/tmpに出力するように設定し起動しています。
$ /usr/sbin/pg_ctl -D $HOME/pgdata -l /tmp/postgresql.log start サーバの起動完了を待っています....完了 サーバ起動完了上記のように出力されれば PostgreSQL の起動は成功です。
PostgreSQLが起動したのでデータベースとユーザーを作成します。
/usr/bin/createdb sakuradb何も表示されず、プロンプト($)が表示されれば成功です。
$ psql -l データベース一覧 名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限 -----------+--------+------------------+-------------+-------------------+------------------ postgres | sakura | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | sakuradb | sakura | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | template0 | sakura | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/sakura + | | | | | sakura=CTc/sakura template1 | sakura | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/sakura + | | | | | sakura=CTc/sakura (4 行)sakuradbが存在しているのが確認できます。
psql sakuradb成功すると以下のメッセージが出力されます。
$ psql sakuradb psql (12.1) "help"でヘルプを表示します。 sakuradb=#
CREATE USER ユーザ名 WITH PASSWORD パスワード ;実際に user1 / pass1 でユーザを登録します。
sakuradb=# create user user1 with password 'pass1'; CREATE ROLE
sakuradb=# select usename from pg_user; usename --------- sakura user1 (2 行)
sakuradb=# \q $
作成した user1 ユーザーで接続しテーブル作成および行追加をしてみます。
$ psql -U user1 sakuradb psql (12.1) "help"でヘルプを表示します。 sakuradb=>
sakuradb=> create table t1 (a int, b int); CREATE TABLE sakuradb=> insert into t1 values(1,1),(2,2); INSERT 0 2 sakuradb=> select * from t1; a | b ---+--- 1 | 1 2 | 2 (2 行) sakuradb=> \q
以下に PostgreSQLの停止とcygserverの停止手順を記します。
$ /usr/sbin/pg_ctl -D $HOME/pgdata/ stop サーバ停止処理の完了を待っています....完了 サーバは停止しました
/usr/sbin/cygserver --shutdown実際にコマンドを実行した時の出力です。
$ /usr/sbin/cygserver --shutdown cygserver: Shutdown finished.
cygserverはサービスに登録されています。
Cygwinをアンインストールする前に、以下のコマンドでcygserverサービスを削除してください。
(管理者権限でCygwin Terminalを起動してください)
cygrunsrv -L
cygrunsrv --remove cygserver
以上、CygwinでPostgreSQLを起動する手順でした。