CentOS7に最新版のPostgreSQLをソースからインストール
2016/02/09
OSS DBの試験を受けてみようかなということで、PostgreSQLの勉強を始めていきたいと思います。
Contents
環境
cat /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)
事前準備
1 2 3 4 |
$ su - # useradd postgres # passwd postgres # su - postgres |
以降の作業は指示がない限り、postgresユーザーにて行います。
PostgreSQLのインストール
パッケージのダウンロード
現在の最新版は9.4.4でした。
1 |
wget https://ftp.postgresql.org/pub/source/v9.4.4/postgresql-9.4.4.tar.gz |
ファイルを展開して、postgresql-9.4.4ディレクトリに移動します。
1 2 |
tar zxvf postgresql-9.4.4.tar.gz cd postgresql-9.4.4 |
インストール
1 2 3 |
./configure make All of PostgreSQL successfully made. Ready to install. |
コンパイルに成功すると上記のメッセージが出力されます。
1 2 3 |
$ su # make install PostgreSQL installation complete. |
インストールに成功すると上d記のメッセージが出力されます。
1 |
# exit |
インストール後の設定
環境変数の設定をします。
vi ~/.bash.profile
export PATH=/usr/local/pgsql/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/pgsql/lib:$LD_LIBRARY_PATH
source .bash_profile
起動と停止
ソースからインストールした場合、データベースクラスタが自動的に作成されることはないため、initdbを実行しなければなりません。
データベースクラスタとは、PostgreSQLにおけるデータベースの格納領域です。
initdb -D /home/postgres/data --no-locale
Success. You can now start the database server using
pg_ctl start コマンドを使い、PostgreSQLを起動します。
pg_ctl start -D /home/postgres/data -w
done
server started
psqlコマンドを使い、サーバに接続し動作確認します。
psql
psql (9.4.4)
Type "help" for help.
現在時刻を取得
postgres=# SELECT now();
now
-------------------------------
2015-06-23 10:17:34.781008+09
(1 row)
psqlを終了する場合は\q
最後にpg_ctl stopコマンドでサーバを停止。
done
server stopped
アンインストール
cd postgresql-9.4.4
make uninstall
データベースクラスタ
データベースクラスタは、PostgreSQLにおけるデータベースの格納領域で、PostgreSQLがある買うデータがすべて管理されています。
データベースクラスタの構造は次のようになっています。
$PGDATA/ ←データベースクラスタのパス
PG_VERSION ←メジャーバージョン番号を記録したファイル
base/ ←各データベースのサブディレクトリを格納するファイル
1
1111
global/ ←データベース間で共有するデータを格納
pg_xlog ←ログファイルを格納
pg_xlog ←トランザクションを格納する
postgresql.conf ←PostgreSQLのパラメータを設定する
pg_hba.conf ←クライアントの認証情報を設定
postmaster.pid ←起動中のPostgreSQLサーバのPIDなどを記録
1つのPostgreSQLサーバは、1つのデータベースクラスタを使う。複数のデータベースクラスタを使うことはない。また、データベースクラスタを共有することもありません。
データベース
データベースは、テーブルやインデックス、ビューなどのデータベースオブジェクトの集合。データベースクラスタ内には複数のデータベースを作成でき、データベースの実体は$PGDATA/base/配下にあるディレクトリです。ディレクトリの名前はデータベースのOIDとなっています。
データベース名とOIDの対応関係を調べる。
OID・・・データベースに割り当てられたID
# SELECT oid, datname FROM pg_database;
oid | datname
-------+-----------
1 | template1 テンプレートデータベース
13051 | template0 テンプレートデータベース
13056 | postgres 標準付属ツールがデフォルトの接続先として使うデータベース
(3 rows)
テンプレートデータベース
データベースtemplate1の実体は、$PGDATA/base/1にある
PostgreSQLは既存のデータベースをコピーして新しいデータベースを作成する。
template1は追加して登録できるが、tenplate0は変更できない。
つまり、template1にテーブルtablが定義されている時、tablが定義済みのデータベースを作成したい場合は、template1を使用します。tablを使いたくない時はtemplate0を使用します。
initdb
]
指定したディレクトリにデータベースクラスタを作成するコマンドです。
initdbはroot以外のユーザーで実行し、データベースクラスタを作成したユーザーは、PostgreSQLの管理ユーザーと呼ばれます。
管理ユーザーのみが$PGDATAへのアクセス権を与えられます。initdbはデフォルトで管理ユーザーと同名のデータベースユーザーを作成します。
initdbの主なオプション
ロケール
文字の並び順、文字の分類、ログメッセージの言語、通貨や数字、日時の書式などを指定するものです。
PostgreSQLにロケールを指定すると検索性能が遅くなるなど、問題が発生する場合がありますので、日本語を使用する場合はロケールを無効にすることが推奨されています。ロケールはデータベース単位で指定できます。template1,template0.postgresqlのロケールはinitdbで指定したものとなります。
エンコーディング(文字セット)
エンコーディングとは文字をバイトで表現するときのルールのことです。