ラベル postgresql の投稿を表示しています。 すべての投稿を表示
ラベル postgresql の投稿を表示しています。 すべての投稿を表示

2014年2月13日木曜日

ひとつのホストで異なるバージョンのPostgreSQLを起動する

今回は、ひとつのホスト上で異なるバージョンのPostgreSQLを起動してみたいと思います。
起動するPostgreSQLは過去にねたとしてあげたコミュニティ版の9.2と9.3とし、OSはCentOS6.5(x86_64)とします。

コミュニティ版のPostgreSQL9.xは、データベースクラスタが最初から同じ位置ではないので、利用するポートがかぶらないようにすれば実現は簡単です。


起動スクリプトを使う場合


PostgreSQL9.3は5432ポートで起動させるので(特別なことをせずに) /etc/rc.d/init.d/postgresql-9.3 start で起動します。

PostgreSQL9.2は"/etc/rc.d/init.d/postgresql-9.2"内のPGPORTの記述をPostgreSQL9.3が利用する5432ポートと異なるものに変更します。
ここでは、5433ポートに変更します。
PGPORT=5433
後は、/etc/rc.d/init.d/postgresql-9.2 start で起動します。


pg_ctlを使う場合


面倒でもフルパスで指定するのが間違いがないでしょう。

[postgres@pgsql ~]$ /usr/pgsql-9.3/bin/pg_ctl start -D /var/lib/pgsql/9.3/data
[postgres@pgsql ~]$ /usr/pgsql-9.2/bin/pg_ctl start -o "-p 5433" -D /var/lib/pgsql/9.2/data


動作確認


下記のように9.2と9.3のPostgreSQLが起動しているのが確認できます。
[postgres@pgsql ~]$ ps -fC postgres
UID        PID  PPID  C STIME TTY          TIME CMD
postgres  1364     1  0 18:19 pts/0    00:00:00 /usr/pgsql-9.3/bin/postgres -D /var/lib/pgsql/9.3/data
postgres  1365  1364  0 18:19 ?        00:00:00 postgres: logger process
postgres  1367  1364  0 18:19 ?        00:00:00 postgres: checkpointer process
postgres  1368  1364  0 18:19 ?        00:00:00 postgres: writer process
postgres  1369  1364  0 18:19 ?        00:00:00 postgres: wal writer process
postgres  1370  1364  0 18:19 ?        00:00:00 postgres: autovacuum launcher process
postgres  1371  1364  0 18:19 ?        00:00:00 postgres: stats collector process
postgres  1406     1  0 18:21 pts/0    00:00:00 /usr/pgsql-9.2/bin/postgres -D /var/lib/pgsql/9.2/data -p 5433
postgres  1407  1406  0 18:21 ?        00:00:00 postgres: logger process
postgres  1409  1406  0 18:21 ?        00:00:00 postgres: checkpointer process
postgres  1410  1406  0 18:21 ?        00:00:00 postgres: writer process
postgres  1411  1406  0 18:21 ?        00:00:00 postgres: wal writer process
postgres  1412  1406  0 18:21 ?        00:00:00 postgres: autovacuum launcher process
postgres  1413  1406  0 18:21 ?        00:00:00 postgres: stats collector process
[postgres@pgsql ~]$

psqlコマンドはより新しいバージョンのものになりますが、ポートを指定して下位のバージョンに接続する事ができます。
[postgres@pgsql ~]$ psql -V
psql (PostgreSQL) 9.3.2
[postgres@pgsql ~]$
[postgres@pgsql ~]$ psql -p 5433
psql (9.3.2, server 9.2.6)
Type "help" for help.
postgres=#

2014年2月10日月曜日

コミュニティ版PostgreSQL9.3

以前のねたをPostgreSQL9.3でリメイクします。
なお、今回インストールした環境はCentOS6.5なので、ここからCentOS6-x86_64用のものを利用しています。


以下、そのセットアップ手順です。

インストール

[root@pgsql ~]# rpm -ivh http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-centos93-9.3-1.noarch.rpm
[root@pgsql ~]# yum -y install postgresql93-server


環境整備

/usr/pgsql-9.3配下にいろいろインストールされるので、それに合わせて環境を整備する。
[root@pgsql ~]# su - postgres
[postgres@pgsql ~]$ vi .bash_profile

以下、その編集内容
PATH=$PATH:$HOME/bin:/usr/pgsql-9.3/bin
PGDATA=/var/lib/pgsql/9.3/data
MANPATH="$MANPATH":/usr/pgsql-9.3/share/man

export PATH PGDATA MANPATH

即時反映するには、以下を実行
[postgres@pgsql ~]$ source .bash_profile


 データベース・クラスタの作成と起動

※ rootユーザで # service postgresql-9.3 initdb を実行してもデータベース・クラスタの作成はできます。
  しかし、localeは指定できてもEncodingが指定できない(SQL_ASCIIになる)ので、ここでは普通にinitdbを実行して
  データベースクラスタを作成しています。

[postgres@pgsql ~]$ initdb --no-locale -E UTF-8
[postgres@pgsql ~]$ pg_ctl start -D $PGDATA
server starting
[postgres@pgsql ~]$ ps -fC postgres
UID        PID  PPID  C STIME TTY          TIME CMD
postgres  1295     1  0 00:28 pts/0    00:00:00 /usr/pgsql-9.3/bin/postgres -D /var/lib/pgsql/9.3/data
postgres  1296  1295  0 00:28 ?        00:00:00 postgres: logger process
postgres  1298  1295  0 00:28 ?        00:00:00 postgres: checkpointer process
postgres  1299  1295  0 00:28 ?        00:00:00 postgres: writer process
postgres  1300  1295  0 00:28 ?        00:00:00 postgres: wal writer process
postgres  1301  1295  0 00:28 ?        00:00:00 postgres: autovacuum launcher process
postgres  1302  1295  0 00:28 ?        00:00:00 postgres: stats collector process
[postgres@pgsql ~]$
[postgres@pgsql ~]$ psql -l
                             List of databases
   Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges
-----------+----------+----------+---------+-------+-----------------------
 postgres  | postgres | UTF8     | C       | C     |
 template0 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
 template1 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
(3 rows)
[postgres@pgsql ~]$


※あとは、rpmに含まれるinitスクリプトを利用して自動起動するようにしておけば良いと思います。
[root@pgsql ~]# chkconfig postgresql-9.3 on





2012年11月25日日曜日

コミュニティ版PostgreSQL9.2 + postfix2.9.4

前回インストールしたコミュニティ版のPostgreSQLをpostfixから利用できるようにする。
(また、デフォルトで組みまれるMySQLは使わないので、組み込まれないようにする)
今回も環境はCentOS6.3で、SRPMはFedoraのメンテナさんのサイトより入手したものを利用した。

以下、その手順。


SPECファイルの編集



[root@cent6 ~]# wget http://mstevens.fedorapeople.org/el6/postfix/2.9.4/x86_64/postfix-2.9.4-1.el6.src.rpm
[root@cent6 ~]# rpm -ivh postfix-2.9.4-1.el6.src.rpm
[root@cent6 ~]# cd rpmbuild/SPECS/
[root@cent6 SPECS]# cp -p postfix.spec{,.orig}
[root@cent6 SPECS]# vi postfix.spec

※編集後のdiff出力

[root@cent6 SPECS]# diff -u postfix.spec.orig postfix.spec
--- postfix.spec.orig   2012-08-02 22:30:10.000000000 +0900
+++ postfix.spec        2012-11-25 16:41:59.135013035 +0900
@@ -83,7 +83,7 @@
 %{?with_sasl:BuildRequires: cyrus-sasl-devel}
 %{?with_pcre:BuildRequires: pcre-devel}
 %{?with_mysql:BuildRequires: mysql-devel}
-%{?with_pgsql:BuildRequires: postgresql-devel}
+%{?with_pgsql:BuildRequires: postgresql92-devel}
 %{?with_tls:BuildRequires: openssl-devel}

 %description
@@ -153,8 +153,8 @@
   AUXLIBS="${AUXLIBS} -L%{_libdir}/mysql -lmysqlclient -lm"
 %endif
 %if %{with pgsql}
-  CCARGS="${CCARGS} -DHAS_PGSQL -I%{_includedir}/pgsql"
-  AUXLIBS="${AUXLIBS} -lpq"
+  CCARGS="${CCARGS} -DHAS_PGSQL -I/usr/pgsql-9.2/include"
+  AUXLIBS="${AUXLIBS} -L/usr/pgsql-9.2/lib -lpq"
 %endif
 %if %{with sasl}
   CCARGS="${CCARGS} -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I%{_includedir}/sasl"
[root@cent6 SPECS]#



ビルドとインストール


[root@cent6 SPECS]# rpmbuild -bb --define="dist .el6" --with pgsql --without mysql postfix.spec

(snip)

Wrote: /root/rpmbuild/RPMS/x86_64/postfix-2.9.4-1.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/postfix-perl-scripts-2.9.4-1.el6.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.QQTcLP
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd postfix-2.9.4
+ rm -rf /root/rpmbuild/BUILDROOT/postfix-2.9.4-1.el6.x86_64
+ exit 0
[root@cent6 SPECS]#
[root@cent6 SPECS]# cd ../RPMS/x86_64/
[root@cent6 x86_64]# rpm -Fvh postfix-2.9.4-1.el6.x86_64.rpm postfix-perl-scripts-2.9.4-1.el6.x86_64.rpm
Preparing...                ########################################### [100%]
   1:postfix                ########################################### [ 50%]
   2:postfix-perl-scripts   ########################################### [100%]
[root@cent6 x86_64]#



確認作業


[root@cent6 x86_64]# postconf -m
btree
cidr
environ
fail
hash
internal
ldap
memcache
nis
pcre
pgsql  ←★この行が表示されればOK
proxy
regexp
static
tcp
texthash
unix
[root@cent6 x86_64]#
[root@cent6 x86_64]# ldd /usr/sbin/postfix | grep pg
        libpq.so.5 => /usr/pgsql-9.2/lib/libpq.so.5 (0x00007fa9a5f51000)
[root@cent6 x86_64]#

2012年11月18日日曜日

コミュニティ版 PostgreSQL 9.2


2014/02/10 追記: こちらにコミュニティ版PostgreSQL9.3のねたをUPしました。


普段はソースからインストールするのだが、趣向を変えてコミュニティ版RPMでセットアップしてみる。

なお、今回インストールした環境はCentOS6.3なので、ここからCentOS 6 - x86_64用のものを利用した。

以下、その手順。


インストール



[root@cent6 ~]# rpm -ivh http://yum.postgresql.org/9.2/redhat/rhel-6-x86_64/pgdg-centos92-9.2-6.noarch.rpm
[root@cent6 ~]# yum -y install postgresql92-server.x86_64 postgresql92-devel.x86_64





環境整備

/usr/local/pgsqlな環境に慣れているとすごい違和感を感じるが、/usr/pgsql-9.2配下に何でもインストールされるので、もろもろの環境を整備する。
#何でそんなパスにインストールされるかというと、このあたりに詳しく書かれている

[root@cent6 ~]# su - postgres
[postgres@cent6 ~]$ vi .bash_profile


※以下、その内容

 PATH=$PATH:$HOME/bin:/usr/pgsql-9.2/bin
 PGDATA=/var/lib/pgsql/9.2/data
 MANPATH="$MANPATH":/usr/pgsql-9.2/share/man

 export PATH PGDATA MANPATH

※即時反映するには、以下を実行

[postgres@cent6 ~]$ source .bash_profile




データベース・クラスタの作成と起動


[postgres@cent6 ~]$ initdb --no-locale --encoding=UTF-8
[postgres@cent6 ~]$ pg_ctl start -D $PGDATA
server starting
[postgres@cent6 ~]$ ps -fC postgres
UID        PID  PPID  C STIME TTY          TIME CMD
postgres  1560     1  0 23:44 pts/1    00:00:00 /usr/pgsql-9.2/bin/postgres -D /var/lib/pgsql/9.2/data
postgres  1561  1560  0 23:44 ?        00:00:00 postgres: logger process
postgres  1563  1560  0 23:44 ?        00:00:00 postgres: checkpointer process
postgres  1564  1560  0 23:44 ?        00:00:00 postgres: writer process
postgres  1565  1560  0 23:44 ?        00:00:00 postgres: wal writer process
postgres  1566  1560  0 23:44 ?        00:00:00 postgres: autovacuum launcher process
postgres  1567  1560  0 23:44 ?        00:00:00 postgres: stats collector process
[postgres@cent6 ~]$
[postgres@cent6 ~]$ psql -l
                             List of databases
   Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges
-----------+----------+----------+---------+-------+-----------------------
 postgres  | postgres | UTF8     | C       | C     |
 template0 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
 template1 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
(3 rows)

[postgres@cent6 ~]$