概要
Windows 10に開発・検証用にPostgreSQL 9.6.1をインストールし、初歩的な設定を行うまでの作業メモです。
インストーラー版は使わずZIP Archive版で手動インストールします。
環境
- Windows 10 Professional
- PostgreSQL 9.6.1 (ZIP Archive)
参考
- [PostgreSQL] (https://www.postgresql.org/)
- [PostgreSQL 9.5.4文書] (http://www.postgresql.jp/document/9.5/html/index.html)
インストール
ダウンロード
インストールには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
としました。
> 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
データベースの起動
> pg_ctl start -l D:\dev\postgresql-9.6.1\logs\postgresql.log
サーバは起動中です。
データベースの停止
> pg_ctl stop
サーバ停止処理の完了を待っています....完了
サーバは停止しました
ステータスの確認
> pg_ctl status
pg_ctl: サーバが動作中です(PID: 9768)
D:/dev/postgresql-9.6.1/bin/postgres.exe
新しいユーザーの作成
postgresユーザー(スーパーユーザー)を使って、rubytomato
というユーザーを作成します。
> createuser -U postgres -P rubytomato
新しいロールのためのパスワード:
もう一度入力してください:
パスワード:
新しいデータベースの作成
postgresユーザー(スーパーユーザー)を使って、rubytomato
ユーザーがオーナーのtest_db
データベースを作成します。
> createdb -E UTF8 -O rubytomato -U postgres test_db
パスワード:
データベースの削除
> 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"アイコンをクリックします。
Nameは"local"としました。
下図のように接続設定を入力します。
データベースに接続した状態です。
補足
作成されているテーブルの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
psql は PostgreSQL の会話型ターミナルです。
使用方法:
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>まで報告してください。