[pgsql-jp: 40920] Re: 【質問】postgresqlパージョンアップ時の共存方法について

SAKAIDA sakaida @ psn.ne.jp
2011年 9月 6日 (火) 09:07:14 JST


境田です。

既に解決済かと思いますが、SQLの機能を調べるだけなら、やはり、
複数バージョンのPostgreSQLを共存して起動させた方が楽ですね。

最近、私も複数バージョンのPostgreSQLのSQL性能の違いを調べて
いましたので、私の経験したことをお知らせします。

・複数バージョンのPostgreSQLを起動するには ポート番号
(ここでは54904とする)を指定してconfigure、make します。
./configure --prefix=/usr/local/pgsql/904 --with-pgport=54904
make
make install
mkdir             /usr/local/pgsql/904/data
chown -R postgres /usr/local/pgsql/904

・データベースの初期化とPostgreSQLの起動
su - postgres
/usr/local/pgsql/904/bin/initdb -D /usr/local/pgsql/904/data
/usr/local/pgsql/904/bin/postmaster -p 54904 -D  /usr/local/pgsql/904/data > /usr/local/pgsql/904/logfile 2>&1 &

・psqlで835と904のSQL性能を調べる
/usr/local/pgsql/835/bin/psql 
/usr/local/pgsql/904/bin/psql -p 54904

尚、LD_LIBRARY_PATHは make時に設定されていますので、psqlを
起動する際に指定する必要はありません。make時とは違う場所の
libpqライブラリを使用するときのみ指定します。

因みに、libpq(クライアント)ライブラリは、PostgreSQLの各バー
ジョンと互換性があります。904のSQL性能を調べるときに、835の
libpqを使用しても何ら問題はありません。


※ 手前ミソですが、pgbashというツールでは /usr/local/pgbash 
   を起動し次のようにします。pgbashは、複数のデータベースに
   接続してSQLを実行できます。

pgbash> connect to DBNAME as DB835; (もしくは ?con DBNAME DB835)
pgbash> PostgreSQL-8.3.5のSQLのテスト

pgbash> connect to DBNAME:54904 as DB904;
pgbash> PostgreSQL-9.0.4のSQLのテスト

PostgreSQL-9.0.4のテストの後、8.3.5に戻ってテストするには
pgbash> set connection DB835; (もしくは ?set DB835)
pgbash> PostgreSQL-8.3.5のSQLのテスト

psqlと同様のデータベース情報を表示したいときは、次のように
sourceコマンドで pgbash環境設定ファイルを切り替えます。
pgbash> source /etc/pgbashrc-8.3   <-- PostgreSQL-8.3用
pgbash> source /etc/pgbashrc-9.0   <-- PostgreSQL-9.0用


On Mon, 5 Sep 2011 21:21:18 +0900
"m.murakami" <m.murakami @ lightcafe.co.jp> さん wrote:

> MauMauさん
> 
> 村上です。前回に引き続きご回答ありがとうございます。
> 
> 試験のときは、必ず片方のバージョンを停止して実施します。
> ありがとうございました。
> 
> 以上。
> 
> -----Original Message-----
> From: pgsql-jp-bounces @ ml.postgresql.jp
> [mailto:pgsql-jp-bounces @ ml.postgresql.jp] On Behalf Of MauMau
> Sent: Monday, September 05, 2011 8:35 PM
> To: PostgreSQL Japanese Mailing List
> Subject: [pgsql-jp: 40917] Re: 【質問】postgresqlパージョンアップ時の共存方
> 法について
> 
> 村上さん
> 
> 
> MauMauといいます。
> 
> 言及されているように、インストールパスとポート番号、データディレクトリ、
> それらを参照する環境変数を切り替えれば、
> 異なるバージョンのPostgreSQLを同時に稼働させることができます。
> 同じユーザアカウントでそれらインスタンスを稼働させることも奇妙なことではあり
> ません。
> 
> ただし、性能の評価をされるとのことですので、一時には一方だけ起動するのがよい
> でしょう。
> なぜなら、測定対象でないほうのインスタンスが、性能に影響するバックグラウンド
> 処理をするかもしれないからです。
> たとえば、8.3と9.0を同時に稼働させておき、
> 先に8.3に対して更新処理を含む性能ベンチマークを実行したとします。
> その後で9.0に対して同じ性能評価をしている間に、
> 8.3のサーバがバックグラウンドでDB書き出しや自動バキュームを実行し、
> 9.0の性能評価に悪影響する可能性があります。
> 
> 以上です。
> 
> ----- Original Message -----
> From: "m.murakami" <m.murakami @ lightcafe.co.jp>
> To: <pgsql-jp @ ml.postgresql.jp>
> Sent: Monday, September 05, 2011 4:58 PM
> Subject: [pgsql-jp: 40915]【質問】postgresqlパージョンアップ時の共存方法につ
> いて
> 
> 
> > 村上と申します。
> > PostgreSQLのバージョンアップ(旧バージョンとの共存)について教えてくださ
> い。
> >
> >
> > バージョン:8.3.5が動作している環境に、最新の9.0.4をインストールしたいと
> 思っ
> >
> > ております。
> >  参考:http://www.postgresql.jp/document/9.0/html/install-procedure.html
> >
> > 8.3.5インストール時に使用したconfigureオプションは、以下のとおりです。
> > # su - postgres
> > # whoami
> > $ tar zxvf postgresql-8.3.5.tar.gz
> > $ cd postgresql-8.3.5
> > $ ./configure --prefix=/usr/local/pgsql/835  $ make  $ make install
> >
> > 9.0.4をインストールする際、prefixの指定を「/usr/local/pgsql/904」というよ
>> >
> > に
> > インストールすれば、旧バージョンのライブラリなど
> > 被らずに問題ないと思っておりますが、現在postgresqlユーザの
> > 「.bash_profile」に以下のような環境変数を設定しています。
> >
> > # PostgreSQL
> > export PATH=$PATH:/usr/local/pgsql/835/bin
> > export MANPATH=$MANPATH:$POSTGRES_HOME/man
> > export LD_LIBRARY_PATH=/usr/local/pgsql/835/lib
> >
> > 同じような記載を9.0.4の時も指定しないといけないと思っておりますが、
> > 通常異なるバージョンを共存させる場合は、postgresユーザ以外のユーザを
> > 作成して運用していくものでしょうか?
> >
> > 今回の目的は、8.3.5と9.0.4とで同じ処理を実施した場合、どの程度
> > パフォーマンスが異なるか確認したいという要件があります。
> > サーバを分ける予算がなかったので、共存させたいとおもっております。
> >
> > 下記のようにテストすれば、postgresqlの.bash_profileの内容を都度変更すれば
> 使
> >
> > 用可能でしょうか?
> >
> > 1.8.3.5の内容の.bash_profileでデータベースインスタンスを1つ作成。
> > 2.データベースインスタンを起動させ、あるクエリを実行して処理を確認
> > 3.データベースインスタンス停止。
> > 4.9.0.4の内容に.bash_profileを変更して、データベースインスタンスを1つ作
>> >
> > (ポートも変える?)
> > 5.データベースインスタンスを起動させ、2と同じクエリを実行して処理を確認
> >
> > もっと簡単に共存させる方法がある、または、8.3.5の方を停止しなくても
> > やり方はあるなどございましたら、アドバイスお願い致します。
> >
> > ※検証機レベルでは、片方のバージョンを停止しても問題ないですが、
> >  実際にバージョンアップするとなった場合に、なるべく停止時間を少なくしたい
>> >
> > も
> >  今後は思っていますので、できるだけ停止時間を少なく実施できる方法があると
>> >
> > かります。
> >
> > 以上、よろしくお願い致します。
> >
> >
> > __________ Information from ESET NOD32 Antivirus, version of virus
> > signature
> > database 6436 (20110904) __________
> >
> > The message was checked by ESET NOD32 Antivirus.
> >
> > http://www.eset.com


--
SAKAIDA Masaaki



pgsql-jp メーリングリストの案内