#author("2019-12-23T21:27:19+09:00","","") #navi(../) * CygwinでPostgreSQLを実行する手順 [#j0a7079a] 「Windows環境を汚したくないなぁ。そうだ!CygwinのPostgreSQLパッケージをインストールして動かそう」と思って作業をした備忘録になります。~ サービス(デーモン)として動かすのではなく、Cygwin Terminalからコマンドで実行、操作、停止までの手順となります。~ postgresユーザーなども作成せず、まずはCygwin上でPostgreSQlを動かして試したい。PostgreSQLをサービスに登録したくない!という人には役に立つかも!? #htmlinsert(win-top.html) #contents * 使用環境 [#j2fd0cde] - Windows 10 ver.1909 64bit - Cygwin バージョン $ uname -r 3.1.2(0.340/5/3) * PostgreSQLのインストール [#ra7def0b] PostgreSQLはCygwinが提供しているパッケージをインストールしました。~ インストール手順は、setup-x86_64.exe を起動して postgresql パッケージをインストールしました。~ + View を Full にします。 + Search に postgresql を入力します。 + postgresql をクリックします。 + ▼をクリックし、12.1-1 を選択しました。 + 「次へ」ボタンをクリックしインストールします。 #ref(01.png) #br + 以下の画面が表示されるので、「次へ」ボタンをクリックするとインストールが開始されます。 #ref(02.png) #br + インストール中はプログレスバーが表示されます。 + 完了画面のキャプチャになります。~ 完了ボタンを押せば postgresql パッケージのインストールは完了です。 #ref(03.png) * Cygwin Terminal を起動し PostgreSQLを起動するまで [#ladd788e] 以下、Cygwin Terminal を起動し、PostgreSQLを起動するまでの手順となります。 + Cygwin Terminal を''管理者権限''で起動します。 + cygserver-config コマンドを実行し、サービスに登録します。~ cygserver-config +以下のようなメッセージが表示されるので、途中、''yes'' を入力しEnterキーを押します。~ $ 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! &color(red){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> +PostgreSQLを以下の手順で起動します。~ Cygwin Terminalを管理者権限で起動する必要はありません。 + cygserverを起動します。 $ /usr/sbin/cygserver & 以下のメッセージが表示されれば成功です。 cygserver: Initialization complete. Waiting for requests. + PostgreSQLを起動するためにデータベース初期化コマンド initdb を実行します。~ 上記メッセージが表示されプロンプト($)が表示されていないように見えますが、プロンプト($)表示後メッセージが表示されています。~ なので、Enterキーを押せばプロンプト($)のみが表示されます。 $ /usr/sbin/initdb -D $HOME/pgdata 本記事では、ホームディレクトリ直下にデーベースを作成します。~ 以下、実際にinitdbを実行して出力されたものです。 $ /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 + PostgreSQLを起動します。 /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 の起動は成功です。 * データベース作成とユーザー作成 [#i6c98b84] PostgreSQLが起動したのでデータベースとユーザーを作成します。~ +以下のコマンドでは、データベース名 sakuradb を作成します。 /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が存在しているのが確認できます。 + データベースに接続し、ユーザ名 user1, パスワード pass1 を以下の手順で作成します。 + 以下のコマンドで作成した 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 行) + psqlコマンド \q で終了します。 sakuradb=# \q $ * 作成したユーザーでデータベースに接続してみる [#ja2a3b93] 作成した 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 * データベースの停止とcygserverの停止 [#j7c3b358] 以下に PostgreSQLの停止とcygserverの停止手順を記します。 + 以下のコマンドでPostgreSQLを停止させます。~ 起動時はstartだったところをstopにするだけです。 $ /usr/sbin/pg_ctl -D $HOME/pgdata/ stop サーバ停止処理の完了を待っています....完了 サーバは停止しました + cygserverを以下のコマンドで停止させます。 /usr/sbin/cygserver --shutdown 実際にコマンドを実行した時の出力です。 $ /usr/sbin/cygserver --shutdown cygserver: Shutdown finished. * cygserverのアンインストール(Cygwinをアンインストールする場合) [#s9e5e826] cygserverはサービスに登録されています。~ Cygwinをアンインストールする前に、以下のコマンドでcygserverサービスを削除してください。~ (''管理者権限''でCygwin Terminalを起動してください) + 登録されているサービスを以下のコマンドで確認します。 cygrunsrv -L + 以下のコマンドでcygserverサービスを削除します。 cygrunsrv --remove cygserver 以上、CygwinでPostgreSQLを起動する手順でした。 #htmlinsert(win-btm.html)