2016年7月1日金曜日

CentOS7上でのPostgreSQL構築手順(RPM編)

はいさい!

OSC 2016 OKINAWAに参加すべく、沖縄にやってまいりました、kkidaです。

OSCでは、前に福岡福山(広島)でしゃべらせてもらった、「他DBからPostgreSQLへの移行」の話をします。つまり、新たにPostgreSQLを使い始めるかもしれない人にこそご参加いただきたいわけで、せっかくなので、受講だけじゃなくて、一歩踏みこんで試すところまでやってもらいたい。そのための情報を整備しとかなきゃなーと思って、ひとり合宿in沖縄で本稿を書いています。

ここでは、最近仕事でCentOS 7を触っているので、自分の復習も兼ねて、CentOS 7上でのPostgreSQLインストールを超初心者向けに書こうと思います。

■PostgreSQLインストール方法の選択肢

主要なOSディストリビューション向けにはいくつか方法があって、日本PostgreSQLユーザ会のダウンロードページで各配布先が紹介されています。初心者向けなので、これらのページの渡り歩き方から紹介しておこうと思います。

 ●ダウンロードリンク
  • Windows:GUI環境(WindowsまたLinux)向けにインストーラーが提供されていて、簡単にインストール先を変えたい場合は便利です。
  • Linux(yum):実は私、yumでPostgreSQLいれたことありません。DBサーバーはインターネットにつながっていないケースが多く、ハードル高かった記憶があります。
  • Linux(rpm)、Linux(apt):目的のパッケージをダウンロードしサーバーに転送しておけば良いので、知っていれば簡単ですが知らないと「?」が出まくりです。今回はこれを説明(後述)します。
  • ソースコード:PostgreSQLの実行ユーザやインストール先を変えたい場合、または詳細動作のカスタマイズをしたい場合はソースコードからインストールすることになります。

 ●インストールガイド
 本稿を書くにあたってリンク先を確認しましたが、そこそこ古く
 「そのまま実行したら上手くいった」レベルの情報は期待できなさそうです。

 ●その他
 PostgreSQLの本体開発に参加する人向けのWikiや、JPUGのマスコットロゴについて
 書かれています。(ダウンロードページなので、そういうのも一色多に配布してるw)

※ちなみに、日本PostgreSQLユーザ会では、上記ウェブサイトの刷新を鋭意進めている最中で、本稿の内容は新しいものがリリースされたら読み替えが必要になります。もって1年の命でしょう。

■PostgreSQL(RPM版)のインストール準備

今回はRPM版でPostgreSQL 9.5をインストールします。
配布先からズンズンたどって、以下を入手します。
  • postgresql95
  • postgresql95-contrib
  • postgresql95-libs
  • postgresql95-server
2016年7月の現時点だと、各リンク先に「postgresql95-9.5.3-2PGDG.rhel7.x86_64」のようにPostgreSQL 9.5.3のRPM内のtypoを修正した「-2」がありますので、こちらを使用します。
(初心者向けに直接DL先を挙げておくなら、ダウンロードしサーバーに配置しておくべきは、postgresql95contriblibsserverの4つです。←リンク先は2016年7月時点のものであることに注意)
開発者向けのincludeファイルも必要である場合は、develも取得します。まあこの辺は他のソフトウェアと変わらないでしょう。

サーバーへの配置はwinSCPとかを使って、rootユーザの持ち物で/media/pg95とかに置いておけば良いです。
# mkdir -p /media/pg95 (ココにRPMを転送)
# ls /media/postgres
postgresql95-9.5.3-2PGDG.rhel7.x86_64.rpm
postgresql95-contrib-9.5.3-2PGDG.rhel7.x86_64.rpm
postgresql95-devel-9.5.3-2PGDG.rhel7.x86_64.rpm
postgresql95-libs-9.5.3-2PGDG.rhel7.x86_64.rpm
postgresql95-server-9.5.3-2PGDG.rhel7.x86_64.rpm

RPMだと、前提パッケージが足りていないと途中でこけてしまいますが、CentOS 7.2ではOSメディアから"Development Tools"を入れておけば大丈夫でした。
# mount /dev/cdrom /media/CentOS
# yum  --disablerepo=* --enablerepo=c7-media groupinstall "Development Tools"

■インストール

ここまで準備できれば、インストールは簡単です。依存性でつまづく事の無いよう、以下の順にインストールします。
# rpm -ivh postgresql95-libs-9.5.3-2PGDG.rhel7.x86_64.rpm
# rpm -ivh postgresql95-9.5.3-2PGDG.rhel7.x86_64.rpm
# rpm -ivh postgresql95-devel-9.5.3-2PGDG.rhel7.x86_64.rpm
# rpm -ivh postgresql95-server-9.5.3-2PGDG.rhel7.x86_64.rpm

これで、/usr/pgsql-9.5配下にPostgreSQLがインストールされます。postgresユーザが作成され、systemctlコマンドで起動・停止の管理ができるようになります。
# ls /usr/pgsql-9.5
bin  include  lib  share
# systemctl list-unit-files | grep postgres
postgresql-9.5.service disabled

ところが、まだデータベースとして使用できる準備はできていませんので後続の手順を実施してから起動です。(以前のバージョンではこの時点で使えたような記憶がある。)
どうやら最近のRPM版では、初期設定(データベース作成、PostgreSQL用語でいうinitdb)をまるっとやってくれる便利コマンドが用意されているようで、これを使います。
# cd /usr/pgsql-9.5/bin
# ./postgresql95-setup initdb --no-locale
Initializing database ... OK

なななななんじゃこりゃーって感じでしたが、そうなのです。自動化しちゃうと、出来上がったデータベースクラスタがどこにどうできてるの?と気になってしまいますが、初心者向けなののでココは後に譲ります。いつか調べる。(@soudaiさんに指摘いただき、日本語環境においては是非やっておくべきinitdbコマンドのオプション(--no-locale)を追記しました。2016.7.11)


■起動と自動起動設定

初CentOS 7だったので、sysytemctl慣れしたい私の勉強にお付き合いください。笑
# systemctl list-unit-files | grep postgres
postgresql-9.5.service disabled
# systemctl start postgresql-9.5.service
# systemctl status postgresql-9.5.service
● postgresql-9.5.service - PostgreSQL 9.5 database server
  Loaded: loaded (/usr/lib/systemd/system/postgresql-9.5.service; enabled; vendor preset: disabled)
  Active: active (running) since 水 2016-06-22 22:31:50 JST; 14s ago

起動時のログも拾ってくれるんですね。なかなか便利。(実は↑の初期設定が必要なことに気づかす、起動に失敗してログがでたことで発覚しました。systemctlに感謝!)
自動起動はデフォルトでdisabledでしたので、必要に応じて有効にしておきます。
# systemctl enable postgresql-9.5.service
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-9.5.service to /usr/lib/systemd/system/postgresql-9.5.service.

# systemctl list-unit-files | grep postgres
postgresql-9.5.service enabled

ついでに、社内サーバー前提でRPMからインストールを解説しているわけですので、デフォルトで有効になっているfirewallはoffっちゃいましょう。(異論は認める。)
# systemctl stop firewalld.service
# systemctl disable firewalld.service

これで、データベースが起動しました。
ここから先は、PostgreSQLの初期設定であり、OSやバージョンによらない内容を別の投稿としたいと思います。

では、今日から楽しいPostgreSQLライフをお送りください。

0 件のコメント:

コメントを投稿

PostgreSQL11のJITコンパイリングを試す

llvm-postgres 開発中のPostgreSQL11でJIT(Just In Time=実行時)コンパイリングを行い、クエリ性能の高速化を期待する新機能が登場した。 本記事では 構築方法を確認したので紹介。JITコンパイ...