LINUX

CentOS7に最新版のPostgreSQLをソースからインストール

2016/02/09

OSS DBの試験を受けてみようかなということで、PostgreSQLの勉強を始めていきたいと思います。

環境

cat /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)

事前準備

以降の作業は指示がない限り、postgresユーザーにて行います。

PostgreSQLのインストール

パッケージのダウンロード

現在の最新版は9.4.4でした。

ファイルを展開して、postgresql-9.4.4ディレクトリに移動します。

インストール

コンパイルに成功すると上記のメッセージが出力されます。

インストールに成功すると上d記のメッセージが出力されます。

インストール後の設定

環境変数の設定をします。
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で指定したものとなります。

エンコーディング(文字セット)

エンコーディングとは文字をバイトで表現するときのルールのことです。

-LINUX
-