Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
21
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@rubytomato@github

PostgreSQL 9.6.1 - Installing on Windows 10

概要

Windows 10に開発・検証用にPostgreSQL 9.6.1をインストールし、初歩的な設定を行うまでの作業メモです。
インストーラー版は使わずZIP Archive版で手動インストールします。

環境

  • Windows 10 Professional
  • PostgreSQL 9.6.1 (ZIP Archive)

参考

インストール

ダウンロード

インストールにはzip版を使用しました。
ダウンロードページよりアーカイブファイルをダウンロードし、適当な場所へ展開します。
この記事ではD:\dev\postgresql-9.6.1へ展開しました。

下記は展開した直後のディレクトリの状態です。

postgresql-9.6.1
  ├─bin
  ├─doc
  ├─include
  ├─lib
  ├─pgAdmin 4
  ├─share
  ├─StackBuilder
  └─symbols

データ、ログ用のディレクトリを作成

展開したディレクトリ内にデータ、ログ用のディレクトリを作成します。

  • データ

    • postgresql-9.6.1\data
  • ログ

    • postgresql-9.6.1\logs

環境変数の登録

  • path

    • D:\dev\postgresql-9.6.1\bin
  • PGDATA

    • D:\dev\postgresql-9.6.1\data

データベースクラスタの作成

スーパーユーザーはpostgresとしました。

initdb
> pg_ctl initdb -o "-A password -W -U postgres -E UTF8"
データベースシステム内のファイルの所有者は"<Username>"ユーザでした。
このユーザがサーバプロセスを所有しなければなりません。

データベースクラスタはロケール"Japanese_Japan.932"で初期化されます。
initdb: ロケール"Japanese_Japan.932"用の適切なテキスト検索設定が見つかりません
デフォルトのテキスト検索設定はsimpleに設定されました。

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

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

ディレクトリD:/dev/postgresql-9.6.1/dataの権限を設定しています ... ok
サブディレクトリを作成しています ... ok
デフォルトのmax_connectionsを選択しています ... 100
デフォルトの shared_buffers を選択しています ... 128MB
selecting dynamic shared memory implementation ... windows
設定ファイルを作成しています ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
データをディスクに同期しています...ok

Success. You can now start the database server using:

    "D:/dev/postgresql-9.6.1/bin\pg_ctl" -D "D:\dev\postgresql-9.6.1\data" -l logfile start

データベースの起動

start
> pg_ctl start -l D:\dev\postgresql-9.6.1\logs\postgresql.log
サーバは起動中です。

データベースの停止

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

ステータスの確認

status
> pg_ctl status
pg_ctl: サーバが動作中です(PID: 9768)
D:/dev/postgresql-9.6.1/bin/postgres.exe

新しいユーザーの作成

postgresユーザー(スーパーユーザー)を使って、rubytomatoというユーザーを作成します。

createuser
> createuser -U postgres -P rubytomato
新しいロールのためのパスワード:
もう一度入力してください:
パスワード:

新しいデータベースの作成

postgresユーザー(スーパーユーザー)を使って、rubytomatoユーザーがオーナーのtest_dbデータベースを作成します。

createdb
> createdb -E UTF8 -O rubytomato -U postgres test_db
パスワード:

データベースの削除

dropdb
> dropdb -U postgres -i -e test_db

データベースの一覧

> psql -U postgres -l
ユーザ postgres のパスワード:
                                              データベース一覧
   名前    |   所有者   | エンコーディング |      照合順序      | Ctype(変換演算子)  |      アクセス権
-----------+------------+------------------+--------------------+--------------------+-----------------------
 postgres  | postgres   | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 |
 template0 | postgres   | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 | =c/postgres          +
           |            |                  |                    |                    | postgres=CTc/postgres
 template1 | postgres   | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 | =c/postgres          +
           |            |                  |                    |                    | postgres=CTc/postgres
 test_db   | rubytomato | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 |
(4)

psql

psqlというターミナルソフトでPostgreSQLへログインします。

スーパーユーザー(postgresユーザー)でログイン

スーパーユーザーとはデータベースクラスタ作成時に指定したユーザーです。

> psql -U postgres

新しいユーザーでログイン

> psql -d test_db -U rubytomato
ユーザ rubytomato のパスワード:
psql (9.6.1)
"help" でヘルプを表示します.

test_db=>

メタコマンド

データベースの一覧

=# \l
                                              データベース一覧
   名前    |   所有者   | エンコーディング |      照合順序      | Ctype(変換演算子)  |      アクセス権
-----------+------------+------------------+--------------------+--------------------+-----------------------
 postgres  | postgres   | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 |
 template0 | postgres   | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 | =c/postgres          +
           |            |                  |                    |                    | postgres=CTc/postgres
 template1 | postgres   | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 | =c/postgres          +
           |            |                  |                    |                    | postgres=CTc/postgres

テーブル、ビュー、シーケンスの一覧

test_db=> \z
                            アクセス権
 スキーマ | 名前 |  | アクセス権 | Column privileges | Policies
----------+------+----+------------+-------------------+----------
(0 )

psqlを終了する

test_db=> \q

パスワードファイルの作成

ログインにパスワード認証が必要なユーザーのパスワードを、下記の場所に配置するパスワードファイルに記述しておくとログイン時のパスワード入力を省略することができます。

  • パスワードファイル
    • %APPDATA%\postgresql\pgpass.conf
#hostname:port:database:username:password
localhost:5432:postgres:postgres:<password>
localhost:5432:test_db:rubytomato:<password>

<password>には実際のパスワードを記述します。

ログ設定

pgAdmin 4

postgresql-9.6.1\pgAdmin 4にpgAdmin 4が同梱されているのですぐに使うことができます。
postgresql-9.6.1\pgAdmin 4\bin\pgAdmin4.exeをダブルクリックするとpgAdmin 4が起動します。

pgAdmin 4が起動したら、下図の"Add New Server"アイコンをクリックします。

pgadmin4_1.png

Nameは"local"としました。

pgadmin4_2.png

下図のように接続設定を入力します。

pgadmin4_3.png

データベースに接続した状態です。

pgadmin4_4.png

補足

作成されているテーブルのcreate table文を出力する

CREATE TABLE memo (
  id integer NOT NULL,
  title varchar(255) NOT NULL,
  description text NOT NULL,
  done boolean DEFAULT false NOT NULL,
  updated timestamp without time zone DEFAULT current_timestamp NOT NULL,
  CONSTRAINT memo_pkey PRIMARY KEY(id)
);

CREATE SEQUENCE memo_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;

ALTER SEQUENCE memo_id_seq OWNED BY memo.id;

ALTER TABLE ONLY memo ALTER COLUMN id SET DEFAULT nextval('memo_id_seq'::regclass);

コマンドプロンプトからpg_dumpコマンドを使ってsql文を出力します。

> pg_dump -t memo --schema-only -U test_user -d sample_db
  • -t : テーブル名を指定
  • -U : ユーザー名
  • -d : データベース名

ヘルプ

pg_ctl

> pg_ctl --help
pg_ctlはPostgreSQLサーバの初期化、起動、停止、制御を行うユーティリティです。
使用方法:
  pg_ctl init[db]               [-D DATADIR] [-s] [-o "オプション"]
  pg_ctl start   [-w] [-t SECS] [-D DATADIR] [-s] [-l FILENAME] [-o "OPTIONS"]
  pg_ctl stop    [-W] [-t SECS] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]
  pg_ctl restart [-w] [-t SECS] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]
                 [-o "OPTIONS"]
  pg_ctl reload  [-D DATADIR] [-s]
  pg_ctl status  [-D DATADIR]
  pg_ctl promote  [-D DATADIR] [-s]
  pg_ctl kill    SIGNALNAME PID
  pg_ctl register   [-N SERVICENAME] [-U USERNAME] [-P PASSWORD] [-D DATADIR]
                    [-S START-TYPE] [-w] [-t SECS] [-o "OPTIONS"]
  pg_ctl unregister [-N SERVICENAME]

一般的なオプション:
  -D, --pgdata DATADIR   データベース格納領域の場所です
  -e SOURCE              event source for logging when running as a service
  -s, --silent           エラーメッセージのみを表示し、情報メッセージは表示しません
  -t, --timeout=SECS     -wオプションを使用する時に待機する秒数
  -V, --version             バージョン情報を表示し、終了します
  -w                     作業が完了するまで待機します
  -W                     作業の完了まで待機しません
  -?, --help                このヘルプを表示し、終了します
(デフォルトでは、シャットダウン時は待機し、起動と再起動の時は待機し
ません。)

-Dオプションの省略時、PGDATA環境変数が使用されます。

起動、再起動用のオプション
  -c, --core-files       このプラットフォームでは実行できません
  -l, --log FILENAME     サーバログをFILENAMEへ出力(あるいは追加)します
  -o オプション          postgres(PostgreSQLサーバ実行ファイル)または
                         initdb に渡すコマンドラインオプション
  -p PATH-TO-POSTGRES    通常は不要です

Options for stop or restart:
  -m, --mode=MODE    MODE"smart""fast""immediate"のいずれかです

シャットダウンモードは以下の通りです:
  smart       全クライアントの接続切断後に停止します
  fast        シャットダウン手続き後に停止します
  immediate   シャットダウン手続きを行わずに停止します。再起動時にリカバリ状態になる可能性があります

killモードで利用できるシグナル名:
  ABRT HUP INT QUIT TERM USR1 USR2

登録、登録解除用のオプション:
  -N SERVICENAME  PostgreSQLサーバを登録するためのサービス名です
  -P PASSWORD     PostgreSQLサーバを登録するアカウントのパスワードです
  -U USERNAME     PostgreSQLサーバを登録するアカウントのユーザ名です
  -S START-TYPE   PostgreSQLサーバを登録するためのサービス起動種類です

起動種類は以下の通りです:
  auto       システムの起動時にサービスを自動的に開始します(デフォルト)
  demand     必要に応じてサービスを開始します

不具合は<pgsql-bugs@postgresql.org>まで報告してください。

psql

> psql --help
psqlPostgreSQL の会話型ターミナルです。

使用方法:
  psql [オプション]... [データベース名 [ユーザ名]]

一般的なオプション:
  -c, --command=コマンド   (SQLまたは内部の)単一コマンドを一つだけ実行して終了
  -d, --dbname=DB名        接続するデータベース名を指定(デフォルト: "<Username>")
  -f, --file=ファイル名    ファイルからコマンドを読み込んで実行後、終了
  -l(エル), --list         使用可能なデータベース一覧を表示して終了
  -v, --set=, --variable=NAME=VALUE
                           set psql variable NAME to VALUE
                           (e.g., -v ON_ERROR_STOP=1)
  -V, --version             バージョン情報を表示し、終了します
  -X, --no-psqlrc          初期化ファイル (~/.psqlrc) を読みこまない
  -1(数字の1), --single-transaction
                           単一のトランザクションとして実行(対話式でない場合)
  -?, --help[=options]     show this help, then exit
      --help=commands      list backslash commands, then exit
      --help=variables     list special variables, then exit

入出力オプション:
  -a, --echo-all           スクリプトからのすべての入力を表示
  -b, --echo-errors        echo failed commands
  -e, --echo-queries       サーバーへ送信したコマンドを表示
  -E, --echo-hidden        内部コマンドが生成した問い合わせを表示
  -L, --log-file=ファイル名 セッションログをファイルに書き込む
  -n, --no-readline        拡張コマンドライン編集機能(readline)を無効にする
  -o, --output=ファイル名  問い合わせ結果をファイル(または |パイプ)に送る
  -q, --quiet              静かに実行(メッセージなしで、問い合わせの出力のみ)
  -s, --single-step        シングルステップモード(各問い合わせごとに確認)
  -S, --single-line        単一行モード(行末を SQL コマンドの終了とみなす)

出力フォーマットオプション:
  -A, --no-align           桁揃えなしのテーブル出力モード
  -F, --field-separator=文字列
                           桁揃えなしの出力でのフィールド区切り文字(デフォルト: "|")
  -H, --html               HTML テーブル出力モード
  -P, --pset=変数[=]     表示オプション '変数''値' にセット (\pset コマンドを参照)
  -R, --record-separator=文字列
                           桁揃えなしの出力でのレコード区切り文字(デフォルト:改行)
  -t, --tuples-only        行のみを表示
  -T, --table-attr=TEXT    HTMLテーブルのタグ属性をセット(width, border)
  -x, --expanded           拡張テーブル出力を有効にする
  -z, --field-separator-zero
                           桁揃えなしの出力でのフィールド区切り文字をゼロバイトに設定
  -0, --record-separator-zero
                           桁揃えなしの出力でのレコード区切り文字をゼロバイトに設定

接続オプション:
  -h, --host=ホスト名      データベースサーバーのホストまたはソケットのディレクトリ(デフォルト: "ローカルソケット")
  -p, --port=ポート番号    データベースサーバーのポート番号(デフォルト: "5432")
  -U, --username=ユーザー名  データベースのユーザ名(デフォルト: "<Username>")
  -w, --no-password        パスワード入力を要求しない
  -W, --password           パスワードプロンプトを強制表示する
                           (本来は自動的に表示されるはずです)

詳細は psql の中で "\?" (内部コマンドの場合) または "\help"
(SQL コマンドの場合) をタイプするか、PostgreSQL ドキュメントの psql の
セクションを参照のこと。

不具合は<pgsql-bugs@postgresql.org>まで報告してください。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
21
Help us understand the problem. What are the problem?