CentOS7にPostgreSQL9.3と最新のもので環境構築してみた。

  • このエントリーをはてなブックマークに追加
  • Pocket

どうも、新川です。

 

データベースといえば、Oracle Databaseしか触れたことがありませんでしたが、PostgreSQLというフリーのデータベースでの開発に携わることになりました。

でも、PostgreSQLがどんなものか全く知りません。 

 

そこで、今回はPostgreSQLを構築してみようと思います。

 

PostgreSQLとは

PostgreSQL(ぽすとぐれすきゅーえる: 発音例)は、BSDライセンスに類似するライセンスにより配布されているオープンソースのオブジェクト関係データベース管理システム (ORDBMS) である。その名称は Ingres の後継を意味する「Post-Ingres」に由来している。単純に「Postgres」や「ポスグレ」と呼称されることも多い。

 

PostgreSQL – ウィキペディア

 

 

 PostgreSQLのインストール準備

 

サーバ構成

OS CentOS 7
PostgreSQL PostgresSQL 9.3.5

 

 

PostgreSQLのソースコード入手

PostgreSQLのソースコードは、次のURLのページからダウンロードできます。

 

http://www.postgresql.org/ftp/source/v9.3.5/

上記サイトから、『postgresql-9.3.5.tar.gz』 をダウンロードします。

 

 

 OSユーザ作成

PostgreSQLは、サーバプロセスをrootユーザーで起動できない仕様になっています。

そのため、インストール前にPostgreSQLを運用するOSユーザーを作成します。

今回は、postgresというユーザーを作成します。

※ユーザー名は何でも構いません。

[root]# useradd -c “PostgreSQL User” postgres
[root]# passwd postgres
ユーザー postgres のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
[root]#

 

 

 

ディレクトリの作成

以下のディレクトリを作成し、所有者をpostgresユーザーに変更します。

  • PostgreSQLインストール先のディレクトリ
  • ソースコードを展開するディレクトリ

 

[root]# mkdir /opt/postgresql # PostgreSQLインストール先のディレクトリ
[root]# mkdir /opt/postgresql/scr/ # ソースコードを展開するディレクトリ
[root]# chown postgres /opt/postgresql
[root]# chown postgres /opt/postgresql/scr

 

 ソースコードの展開

作成したディレクトリにダウンロードしたファイルをFTPなどで格納後、postgresユーザーになり、ソースコードのアーカイブを展開します。

[root]# su – postgres
[postgres]$ cd /opt/postgresql/scr/
[postgres]$ tar xvzf postgresql-9.3.5.tar.gz

 

 

PostgreSQLのインストール

ソースのコンパイル

PostgresSQLはデフォルトで /usr/local/pgsql にインストールされるため、コンパイル時にconfigureのオプション”–prefix”を使用し、インストール先のディレクトリを変更します。

[postgres]$ ./configure –prefix=/opt/postgresql

 

以下のエラーが発生しました。gccコンパイラがないらしい。

checking for gcc… no
checking for cc… no
configure: error: no acceptable C compiler found in $PATH

 

yumコマンドでインストールします。

[root]# yum -y install gcc gcc-c++

 

再度configureを実行。

またエラーが発生しました。今度はreadlineというライブラリがないらしい。

configure: error: readline library not found
If you have readline already installed, see config.log for details on the
failure. It is possible the compiler isn’t looking in the proper directory.
Use –without-readline to disable readline support.

 

yumコマンドでインストールします。

 [root]# yum install readline readline-devel

 

再々度configureを実行…今度はzlibがないそうです(ノД`)

configure: error: zlib library not found
If you have zlib already installed, see config.log for details on the
failure. It is possible the compiler isn’t looking in the proper directory.
Use –without-zlib to disable zlib support.

 

yumコマンドでインストールします。

[root]# yum install zlib-devel

 

再びconfigureを実行し、ようやく正常に終了しました。

[postgres]$ ./configure –prefix=/opt/postgresql

config.status: linking src/makefiles/Makefile.linux to src/Makefile.port
[postgres]$

 

 インストール

コンパイルしたソースをインストールします。

[postgres]$ make

All of PostgreSQL successfully made. Ready to install.
[postgres]$
[postgres]$ make install

PostgreSQL installation complete.
[postgres]$

 

ようやくインストールが終わりました。

次はデータベースに接続してみましょう。

 

 

PostgreSQLデータベースに接続してみよう

さっそくデータベースに接続してみたいところですが、インストールしただけではデータベースは使用できません。

データベースに接続出来る様に、いろいろ設定していきましょう。

 

環境変数の設定

PostgreSQLのコマンドなどにパスが通っていないため、環境変数を設定します。

postgresユーザーのホームディレクトリにある、”.bash_profile”に以下の環境変数を追加します。

export PATH=$PATH:/opt/postgresql/bin # PostgreSQLのコマンドパスを設定
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/postgresql/lib # PostgreSQLの共有ライブラリを設定
export PGDATA=/opt/postgresql/data # データベースを配置するディレクトリを設定

 

また、これらの環境変数は次回ログインから有効になりますが、今回はsourceコマンドで設定を即座に反映します。

[postgres]$ source $HOME/.bash_profile

 

 

データベースクラスタの初期化

データベースを使用できる状態にするためには、データベースクラスタを初期化する必要があります。

データベースクラスタとは、複数のデータベースを格納する領域のことです。

[postgres]$ initdb –encoding=UTF8 –no-locale

 

–encoding データベースのデフォルトの文字コードを設定するオプション。
ここでは、文字コードをUTF-8に設定。
–no-locale ロケールを使用しないことを設定するオプション。
ロケールとは、言語や文化に応じた処理をするOSの機構です。
英語や日本語のデータを扱う場合、ロケールは特に必要ありません。

 

PostgreSQLでは、initdbコマンドを実行したユーザーがスーパーユーザーになります。

また、環境変数のPGDATA変数で指定したディレクトリにデータベースクラスタが作成されます。

 

 

サーバプロセスの起動

postgresユーザーでpg_ctlコマンドを実行し、PostgreSQLのサーバプロセスを起動します。

[postgres]$ pg_ctl -w start
waiting for server to start….LOG: database system was shut down at 2014-10-11 08:43:44 JST
LOG: database system is ready to accept connections
LOG: autovacuum launcher started
done
server started
[postgres]$

 

起動時の-wはwaitを表し、起動処理が終了した時点でコマンドプロンプトに戻すようにするオプションです。

 

 

データベースに接続

ではさっそくデータベースを作成し、接続してみましょう。

 

[postgres$ createdb db1 # データベース作成
[postgres]$
[postgres]$ psql db1 # データベース接続
psql (9.3.5)
Type “help” for help.

db1=#
db1=# \q # データベースからログアウト
[postgres]$

 

 

無事、データベースの作成と接続が上手くいきました。

これでひとまずPostgresSQLの環境構築は終わりです。

 

 

PostgreSQLの自動起動設定

OSを起動した際に、PostgreSQLも一緒に起動するよう設定してみましょう。

 

CentOS7からはサービスの制御方法が変わっているらしく、CentOS6まで出来ていた「OSの”chkconfig”コマンドで自動起動スクリプトをシステムに登録する」ということができませんでした。

CentOS7からは systemd というものでサービスを制御するようです。

 

そのため、PostgreSQLのソースにある自動起動スクリプトのテンプレートを流用することができません。

 

systemd でPostgreSQLのサービスを自動起動するための設定ファイルを作成してみました。

設定ファイルは/lib/systemd/systemディレクトリに作成し”postgresql.service”というファイル名にしました。

 

[Unit]
Description=PostgreSQL database server
After=network.target

[Service]
Type=forking
PIDFile=/opt/postgresql/data/postmaster.pid
User=postgres
ExecStart=/opt/postgresql/bin/pg_ctl -s -D opt/postgresql/data start
ExecStop=/opt/postgresql/bin/pg_ctl -s -D opt/postgresql/data stop -m fast

[Install]
WantedBy=multi-user.target

 

※上記の設定は、単純に自動起動するようにしたもので、サービス起動時の制御などは全く考慮していません。

 

作成した設定ファイルをシステムに登録します。

システムに登録すると、/etc/systemd/system/multi-user.target.wantsディレクトリに設定ファイルのリンクが作成されます。

[root]# systemctl enable postgresql.service
ln -s ‘/usr/lib/systemd/system/postgresql.service’ ‘/etc/systemd/system/multi-user.target.wants/postgresql.service’
[root]#

 

OSを再起動し、PostgreSQLが自動起動することを確認できました(^O^)

 

 

まとめ

今回は取り敢えず環境構築までとなります。

PostgreSQLを理解するには、データベースの設計からパフォーマンスチューニングなど、いろいろと覚えなくてはならないことが多そうです。

 

また、今回は最新のものということで、よく調べずにCentOS7を使用したので、OSで変更された部分などで苦労させられました。

PostgreSQLなどのミドルウェア以外に、OS部分も新しくなり続けるので、改めていろんなことを日々勉強していかないといけないなぁと感じました。

 

  • このエントリーをはてなブックマークに追加
  • Pocket

SNSでもご購読できます。

コメントを残す

*