カテゴリー
コンピューター

【試行錯誤】PostgreSQL 最新版インストールにすごく苦労しましたのでメモ!!!【virtualbox で LAPP 開発環境構築したい】

ポイント

  • 最新版のコマンドは postgresql ではなかった。postgresql-9.2 だった(2013年3月時点、PostgreSQL バージョン 9.2)
  • PostgreSQL 最新版を CentOS 5.9 に yum でインストールするにはリポジトリを導入する。2013年3月時点ではバージョン 9.2 だからかリポジトリは pgdg92 という名前だ。
  • yum でインストールするとき、パッケージ名は postgresql92-server としないと最新版がインストールされなかった(2013年3月時点、PostgreSQL バージョン 9.2)。postgresql ではなかった。
  • CentOS の postgres ユーザに変更してから psql コマンドで、PostgreSQL にログインできる。

1.【実際にやってみて】PostgreSQL インストール後にリポジトリを導入してもアップグレードできません><

LAPP 環境、つまり Linux で、Apache で、PostgreSQL で、PHP の開発環境を VirtualBox に作ろうと思いました。

本ブログのような LAMP 環境を作成した時と同じように EPEL、Remi、RPMforge の 3 つのリポジトリを導入して、同じようにインストールすればよいのでしょうと思ったのですけれども、次のコマンドでのインストールでは、PostgreSQL のバージョンが 8 と古かったのです。

# Apache、PostgreSQL、PHP をインストール
yum --enablerepo=epel,remi,rpmforge install httpd-devel mod_ssl postgresql-server php php-devel php-pgsql

では、リポジトリを PostgreSQL RPM Repository (with Yum) ページの PostgreSQL 9.2 ブロックの CentOS 5 – i386 リンクから、次のコマンドで導入して PostgreSQL バージョン 9 にアップグレードすればよいですよね?

簡単です!と思ったのですけれども、甘かったです。

# リポジトリをダウンロード
wget http://yum.pgrpms.org/9.2/redhat/rhel-5-i386/pgdg-centos92-9.2-6.noarch.rpm
# リポジトリをインストール
rpm -Uvh pgdg-centos92-9.2-6.noarch.rpm

インストールすればこのリポジトリは最初から有効となっているので、そのまま yum の update、念の為に upgrade も試したのですけれども、PostgreSQL がアップデート対象になりませんでした。PostgreSQL は対象とならずになぜか全く別の普段直接使わないパッケージがアップデート対象になりました。不思議です。

仕方がありませんので、一旦 PostgreSQL をアンインストールしてからもう一度インストールいたしました。

2.【こぼれ話】PostgreSQL はアンインストールも一筋縄ではいきません><

ここで、苦労、というわけではありませんが、へぇ〜と感じいったことがございました。PostgreSQL だけアンインストールしようとしましたら、Apache も、PHP も依存関係によりアンインストールされてしまったのです。

順を追って説明いたします。まずはアンインストールするべき PostgreSQL パッケージを調査いたしました。

[root@localhost tmp]# yum list installed | grep postgresql
postgresql.i386                          8.1.23-6.el5_8                installed
postgresql-libs.i386                     8.1.23-6.el5_8                installed
postgresql-server.i386                   8.1.23-6.el5_8                installed
[root@localhost tmp]#

なるほど。postgresql、postgresql-libs、postgresql-server をアンインストールすればよいのですね。それで、実際にアンインストールしてみましたら次のようになりました。

[root@localhost tmp]# yum remove postgresql postgresql-libs postgresql-server
Loaded plugins: fastestmirror, security
Setting up Remove Process
Resolving Dependencies
--> Running transaction check
---> Package postgresql.i386 0:8.1.23-6.el5_8 set to be erased
---> Package postgresql-libs.i386 0:8.1.23-6.el5_8 set to be erased
--> Processing Dependency: libpq.so.4 for package: php-pgsql
--> Processing Dependency: libpq.so.4 for package: apr-util
---> Package postgresql-server.i386 0:8.1.23-6.el5_8 set to be erased
--> Running transaction check
---> Package apr-util.i386 0:1.2.7-11.el5_5.2 set to be erased
--> Processing Dependency: libaprutil-1.so.0 for package: apr-util-devel
--> Processing Dependency: libaprutil-1.so.0 for package: httpd
--> Processing Dependency: apr-util = 1.2.7-11.el5_5.2 for package: apr-util-devel
---> Package php-pgsql.i386 0:5.4.13-1.el5.remi set to be erased
--> Running transaction check
---> Package apr-util-devel.i386 0:1.2.7-11.el5_5.2 set to be erased
--> Processing Dependency: apr-util-devel for package: httpd-devel
---> Package httpd.i386 0:2.2.3-76.el5.centos set to be erased
--> Processing Dependency: httpd-mmn = 20051115 for package: php
--> Processing Dependency: httpd-mmn = 20051115 for package: mod_ssl
--> Processing Dependency: httpd = 2.2.3-76.el5.centos for package: mod_ssl
--> Running transaction check
---> Package httpd-devel.i386 0:2.2.3-76.el5.centos set to be erased
---> Package mod_ssl.i386 1:2.2.3-76.el5.centos set to be erased
---> Package php.i386 0:5.4.13-1.el5.remi set to be erased
--> Finished Dependency Resolution

Dependencies Resolved

===============================================================================================
 Package                   Arch         Version                        Repository         Size
===============================================================================================
Removing:
 postgresql                i386         8.1.23-6.el5_8                 installed          11 M
 postgresql-libs           i386         8.1.23-6.el5_8                 installed         494 k
 postgresql-server         i386         8.1.23-6.el5_8                 installed         9.8 M
Removing for dependencies:
 apr-util                  i386         1.2.7-11.el5_5.2               installed         164 k
 apr-util-devel            i386         1.2.7-11.el5_5.2               installed         198 k
 httpd                     i386         2.2.3-76.el5.centos            installed         3.2 M
 httpd-devel               i386         2.2.3-76.el5.centos            installed         519 k
 mod_ssl                   i386         1:2.2.3-76.el5.centos          installed         177 k
 php                       i386         5.4.13-1.el5.remi              installed         7.9 M
 php-pgsql                 i386         5.4.13-1.el5.remi              installed         279 k

Transaction Summary
===============================================================================================
Remove       10 Package(s)
Reinstall     0 Package(s)
Downgrade     0 Package(s)

Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Erasing        : apr-util-devel                                                         1/10
  Erasing        : httpd-devel                                                            2/10
  Erasing        : httpd                                                                  3/10
  Erasing        : postgresql-server                                                      4/10
  Erasing        : postgresql                                                             5/10
  Erasing        : postgresql-libs                                                        6/10
  Erasing        : mod_ssl                                                                7/10
  Erasing        : php                                                                    8/10
  Erasing        : apr-util                                                               9/10
  Erasing        : php-pgsql                                                             10/10

Removed:
  postgresql.i386 0:8.1.23-6.el5_8                postgresql-libs.i386 0:8.1.23-6.el5_8       
  postgresql-server.i386 0:8.1.23-6.el5_8       

Dependency Removed:
  apr-util.i386 0:1.2.7-11.el5_5.2             apr-util-devel.i386 0:1.2.7-11.el5_5.2         
  httpd.i386 0:2.2.3-76.el5.centos             httpd-devel.i386 0:2.2.3-76.el5.centos         
  mod_ssl.i386 1:2.2.3-76.el5.centos           php.i386 0:5.4.13-1.el5.remi                    
  php-pgsql.i386 0:5.4.13-1.el5.remi         

Complete!
[root@localhost tmp]#

なんとなくアンインストールが長いです、、、と思っていたら、PostgreSQL だけではなく、Apache も、PHP も綺麗サッパリ削除されました。。。アイエエエエ。

。。。。。。。。。。いえ、逆にさっぱりしました。これから LAPP 環境をゼロから作ると考えればよいのです!!!

3.【LAPP 環境構築】PostgreSQL をインストールと初期化♪

3−1.PostgreSQL リポジトリ設定

前提条件として、次のリポジトリが導入済みで、いずれも無効にしています。

  • EPEL
  • Remi
  • RPMforge
  • PostgreSQL 9.2

PostgreSQL 9.2 リポジトリは、PostgreSQL RPM Repository (with Yum) ページの PostgreSQL 9.2 ブロックの CentOS 5 – i386 リンクからダウンロードし、インストールしました。そのときのコマンドは、本投稿ですでに記述しておりますので割愛いたします。

導入した Postgres リポジトリ設定を修正しまして、デフォルトでは無効となるようにしました。

vim /etc/yum.repos.d/pgdg-92-centos.repo

導入直後は有効となっていますのでこれを無効としました。

[pgdg92]
name=PostgreSQL 9.2 $releasever - $basearch
baseurl=http://yum.postgresql.org/9.2/redhat/rhel-$releasever-$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG-92

[pgdg92]
name=PostgreSQL 9.2 $releasever - $basearch
baseurl=http://yum.postgresql.org/9.2/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG-92

3−2.インストールする PostgreSQL のパッケージを改めて探します!

yum の update で postgresql はアップデート対象となりませんでしたことから、PostgreSQL 最新版は違うパッケージ名なのかもしれない可能性に思い当たりました。

そこで、パッケージを検索です。

[root@localhost tmp]# yum --enablerepo=pgdg92 search postgresql
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
===================================== Matched: postgresql =====================================
・・・略・・・
postgresql84-server.i386 : The programs needed to create and run a PostgreSQL server
postgresql84-tcl.i386 : A Tcl client library for PostgreSQL
postgresql84-test.i386 : The test suite distributed with PostgreSQL
postgresql92.i386 : PostgreSQL client programs and libraries
postgresql92-contrib.i386 : Contributed source and binaries distributed with PostgreSQL
postgresql92-debuginfo.i386 : Debug information for package postgresql92
postgresql92-devel.i386 : PostgreSQL development header files and libraries
postgresql92-docs.i386 : Extra documentation for PostgreSQL
postgresql92-jdbc.i386 : JDBC driver for PostgreSQL
postgresql92-jdbc-debuginfo.i386 : Debug information for package postgresql92-jdbc
postgresql92-libs.i386 : The shared libraries required for any PostgreSQL clients
postgresql92-odbc.i386 : PostgreSQL ODBC driver
postgresql92-odbc-debuginfo.i386 : Debug information for package postgresql92-odbc
postgresql92-plperl.i386 : The Perl procedural language for PostgreSQL
postgresql92-plpython.i386 : The Python procedural language for PostgreSQL
postgresql92-pltcl.i386 : The Tcl procedural language for PostgreSQL
postgresql92-server.i386 : The programs needed to create and run a PostgreSQL server
postgresql92-test.i386 : The test suite distributed with PostgreSQL
・・・略・・・

はい、わかりました。postgresql92-server をインストールすればよさそうですっ!

PostgreSQL は、メジャーバージョンの 8 と 9 を明確に分けて扱っているようですね。そのため、postgresql-server とバージョン指定をしないままですと基本的に歴史あるバージョン 8 が採用されると考えればよさそうです。

最新のバージョン 9 を利用するには、明示的に postgresql92-server と指定する必要があるようです♪

3−3.改めて LAPP 環境のパッケージをインストールするのです♪

万感の思いを込めて最新版の PostgreSQL 9.2 をインストールします。いよいよです!

[root@localhost tmp]# yum --enablerepo=epel,pgdg92,remi,rpmforge install httpd-devel mod_ssl postgresql92-server php php-devel php-pgsql
・・・略・・・

Installed:
  httpd-devel.i386 0:2.2.3-76.el5.centos              mod_ssl.i386 1:2.2.3-76.el5.centos       
  php.i386 0:5.4.13-1.el5.remi                        php-pgsql.i386 0:5.4.13-1.el5.remi       
  postgresql92-server.i386 0:9.2.3-2PGDG.rhel5       

Dependency Installed:
  apr-util.i386 0:1.2.7-11.el5_5.2              apr-util-devel.i386 0:1.2.7-11.el5_5.2        
  httpd.i386 0:2.2.3-76.el5.centos              postgresql-libs.i386 0:8.1.23-6.el5_8         
  postgresql92.i386 0:9.2.3-2PGDG.rhel5        

Complete!
[root@localhost tmp]#

無事に次のパッケージがインストールされました。

★yum で指定したパッケージ 5 つ

  • httpd-devel.i386 0:2.2.3-76.el5.centos
  • mod_ssl.i386 1:2.2.3-76.el5.centos
  • php.i386 0:5.4.13-1.el5.remi
  • php-pgsql.i386 0:5.4.13-1.el5.remi
  • postgresql92-server.i386 0:9.2.3-2PGDG.rhel5

★指定しなかったけれども、依存関係でインストールされたパッケージ 5 つ

  • apr-util.i386 0:1.2.7-11.el5_5.2
  • apr-util-devel.i386 0:1.2.7-11.el5_5.2
  • httpd.i386 0:2.2.3-76.el5.centos
  • postgresql-libs.i386 0:8.1.23-6.el5_8
  • postgresql92.i386 0:9.2.3-2PGDG.rhel5

3−4.PostgreSQL の初期化、起動、自動起動設定だ!!!

コマンドは postgresql ではなく、postgresql-9.2 を使います!まずは初期化しまし、、、、できません。あれ?

[root@localhost tmp]# /etc/init.d/postgresql-9.2 start

/var/lib/pgsql/9.2/data is missing. Use "service postgresql-9.2 initdb" to initialize the cluster first.
                                                           [失敗]
[root@localhost tmp]#

バージョン 8 の PostgreSQL の場合、はじめての start で自動的に初期化されたのですけれども、バージョン 9 では明示的に initdb で初期化しないとダメなようです。

[root@localhost tmp]# service postgresql-9.2 initdb
データベースを初期化中:                                    [  OK  ]
[root@localhost tmp]#

初期化と起動はちがいますので、start で PostgreSQL を起動します。

[root@localhost tmp]# /etc/init.d/postgresql-9.2 start
postgresql-9.2 サービスを開始中:                           [  OK  ]
[root@localhost tmp]#

サーバ起動時に、PostgreSQL も自動的に起動するように設定しました。設定しまして、確認も行いました♪

[root@localhost tmp]# chkconfig postgresql-9.2 on
[root@localhost tmp]# chkconfig --list postgresql-9.2
postgresql-9.2      0:off     1:off     2:on     3:on     4:on     5:on     6:off
[root@localhost tmp]#

これで設定は完了です♪

3−5.PostgreSQL にログインして、バージョン確認 SQL だ!

最後に、PostgreSQL に実際にログインしてみまして、バージョンを確認する SQL を発行してみます。

なお、調べていく中で知ったのですけれども、PostgreSQL インストール時点で CentOS に postgres ユーザが自動的に追加されます。

[root@localhost ~]# id postgres
uid=26(postgres) gid=26(postgres) 所属グループ=26(postgres)
[root@localhost ~]#

この postgres ユーザは PostgreSQL の中でのおそらくスーパーユーザの役割を果すのでしょう。インストール作業をしておりました CentOS の root ユーザから CentOS の postgres ユーザに変更しまして、PostgreSQL へアクセスします。

[root@localhost tmp]# su - postgres
-bash-3.2$

-bash-3.2$ なんて、はじめて拝見いたしました。なれないと、なんだか怖いです。でも、勇気を出して♪

この段階では、まだ PostgreSQL にはログインしていません。psql コマンドで PostgreSQL へログインします。今回は求められませんでしたけれども別のユーザの場合は、この時にパスワード入力が求められるのでしょうか?

-bash-3.2$ psql
psql (9.2.3)
"help" でヘルプを表示します.

postgres=#

うう、postgres=# ですか。。。またも見慣れぬ表示をされますとは。。。とにかく、これでようやっと SQL を入力できるようになりました。早速、バージョン確認の SQL である、SELECT version() を発行してみます。MySQL と確認方法が異なりますね。

postgres=# SELECT version();
                                                version                                       

-----------------------------------------------------------------------------------------------
---------
 PostgreSQL 9.2.3 on i686-pc-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54)
, 32-bit
(1 行)

postgres=#

ログインした時にもちらりと表示されましたけれども、これでインストールした PostgreSQL がバージョン 9.2.3 であることがわかりました。

さて、今回はこれまでにいたしましょう。ログアウ、、、ト、はどうすればよいのでしょう?exit とか、quit ではログアウトできません><。あ、¥q でログアウトできました。

postgres=# \q
-bash-3.2$

これで PpstgreSQL からログアウトしました。最後に、postgres ユーザから exit しまして今まで作業していたユーザ、今回はroot、に戻りましておしまいです♪

-bash-3.2$ exit
logout
[root@localhost tmp]#

少し振り返ってみますと、postsql-9.2 コマンドの「-9.2」部分がなんだかわずらわしいですけれども、起動の時のみで、PostgreSQL へログインするときはバージョンの数字は意識しなくてよいですから実際の作業時は、実はわずらわしくないですね♪

作業は異常です♪おつかれさまでした!!!

おわりに

PostgreSQL ってなんですか?わたくし使ったことありません!

ポストグレス・キュー・エルって発音するのですか?言い辛いです!

インストールするの、どうやってやればいいのですか?わたくし知りません!

ログインってどうやるのですか?わたくしわかりません!

そのようなわけで、まずはインストールなのですけれども、ものすごく苦労いたしましたのでメモいたしました。

最後に、参考にさせていただいたページです。PostgreSQL のリポジトリページや、インストールの記録が本当に助けになりました。ありがとうございます。

以上です。

「【試行錯誤】PostgreSQL 最新版インストールにすごく苦労しましたのでメモ!!!【virtualbox で LAPP 開発環境構築したい】」への1件の返信

コメントを残す