CentOS で PL/pgSQL デバッガ
PostgreSQL 用の GUI インタフェースである pgAdmin-III (pgAdmin: PostgreSQL administration and management tools) ですが、出来が良いわりにはあまり用いられていないようです。コマンドラインのツールでだいたい足りてしまうからでしょうが、ストアドプロシージャのデバッグの際などには、変数の状態等を見ながら作業ができる GUI もそれなりにありがたいですので、pgAdmin-III で動作する PL/pgSQL のデバッガ (PgFoundry: PLpgSQL Debugger by EnterpriseDB: Project Info) を CentOS-5.5 上で試してみたいと思います。
Red Hat Enterprise Linux (RHEL) なり CentOS の ver. 5 系は 2005 年のデビューですので、ずっと PostgreSQL のバージョンが 8.1 と、いくらなんでも古かったのですが、RHEL-5.5 からは PostgreSQL-8.4 が使えるようになりました。ここでは、そちらで行ってみたいと思います。
サーバの設定
パッケージ “postgresql-server” と “postgresql84-server” は排他です。何かの依存で “postgresql-server” が先に入ってしまうと、後から “postgresql84-server” を入れられませんので、注意してください。
[root@queen-centos ~]# yum install -y postgresql84 postgresql84-server (中略) [root@queen-centos ~]#
データベースを初期化、起動し、システム起動時に起動するようにします。
[root@queen-centos ~]# service postgresql initdb データベースを初期化中: [ OK ] [root@queen-centos ~]# service postgresql start postgresql サービスを開始中: [ OK ] [root@queen-centos ~]# chkconfig postgresql on [root@queen-centos ~]#
CentOS のデフォルトだと、PostgreSQL は ident 認証になっていますので、”postgres” ユーザに su して、テスト用のデータベースと DB ロールを作成します。ついでに、リモートからアクセスできるようにしておきます。pg_hba.conf のアクセス制御のネットワークの指定については、環境ごとに適宜読み替えてください。
[root@queen-centos ~]# su - postgres
-bash-3.2$ createdb pgtest
-bash-3.2$ createuser --encrypted --pwprompt \
--superuser --createrole --createdb pgtest
新しいロールのパスワード:
もう一度入力してください:
-bash-3.2$ cp /var/lib/pgsql/data/postgresql.conf \
/var/lib/pgsql/data/postgresql.conf.orig
-bash-3.2$ vi /var/lib/pgsql/data/postgresql.conf
-bash-3.2$ diff -uNr /var/lib/pgsql/data/postgresql.conf.orig \
/var/lib/pgsql/data/postgresql.conf
--- /var/lib/pgsql/data/postgresql.conf.orig 2010-08-20 15:23:50.000000000 +0
+++ /var/lib/pgsql/data/postgresql.conf 2010-08-20 15:24:41.000000000 +0900
@@ -56,7 +56,7 @@
# - Connection Settings -
-#listen_addresses = 'localhost' # what IP address(es) to listen;
+listen_addresses = '*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost', '*' = all
# (change requires restart)
-bash-3.2$ cp /var/lib/pgsql/data/pg_hba.conf \
/var/lib/pgsql/data/pg_hba.conf.orig
-bash-3.2$ vi /var/lib/pgsql/data/pg_hba.conf
-bash-3.2$ diff -uNr /var/lib/pgsql/data/pg_hba.conf.orig \
/var/lib/pgsql/data/pg_hba.conf
--- /var/lib/pgsql/data/pg_hba.conf.orig 2010-08-20 15:26:04.000000000 +0
+++ /var/lib/pgsql/data/pg_hba.conf 2010-08-20 15:27:07.000000000 +0900
@@ -72,3 +72,6 @@
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
+# IPv4 local network connections:
+host pgtest pgtest 192.168.1.0/24 md5
+
-bash-3.2$ exit
logout
[root@queen-centos ~]# service postgresql restart
postgresql サービスを停止中: [ OK ]
postgresql サービスを開始中: [ OK ]
[root@queen-centos ~]# iptables -I INPUT -p tcp --dport 5432 -j ACCEPT
[root@queen-centos ~]# service iptables save
ファイアウォールのルールを /etc/sysconfig/iptables に保存中[ OK ]
[root@queen-centos ~]#
PL/pgSQL デバッガのインストール
本家からダウンロードできる tar ball のソースは PostgreSQL-8.4 には古いのですが、かといって CVS 版も 64bit 環境だと微妙にコケるので、パッチをあてた SRPM を置いておきます:
以下のようにビルドしてインストールしてください:
[root@queen-centos ~]# yum install -y rpm-build gcc \ postgresql84-devel openssl-devel [root@queen-centos ~]# rpmbuild --rebuild \ postgresql84-pldebugger-8.4.4-0.cvs20100919.src.rpm [root@queen-centos ~]# rpm -Uvh \ /usr/src/redhat/RPMS/x86_64/postgresql84-pldebugger-8.4.4-0.cvs20100919.x86_64.rpm [root@queen-centos ~]#
PL/pgSQL 用のデバッグプラグインがロードされるように設定ファイルを書きかえ、PostgreSQL を再起動します。
[root@queen-centos ~]# cp /var/lib/pgsql/data/postgresql.conf \
/var/lib/pgsql/data/postgresql.conf.orig2
[root@queen-centos ~]# vi /var/lib/pgsql/data/postgresql.conf
[root@queen-centos ~]# diff -uNr /var/lib/pgsql/data/postgresql.conf.orig2 \
/var/lib/pgsql/data/postgresql.conf
--- /var/lib/pgsql/data/postgresql.conf.orig2 2010-09-20 17:33:05.000000000 +0900
+++ /var/lib/pgsql/data/postgresql.conf 2010-09-20 17:34:28.000000000 +0900
@@ -121,7 +121,7 @@
#max_files_per_process = 1000 # min 25
# (change requires restart)
-shared_preload_libraries = '' # (change requires restart)
+shared_preload_libraries = '$libdir/plugins/plugin_debugger'
# - Cost-Based Vacuum Delay -
[root@queen-centos ~]# service postgresql restart
postgresql サービスを停止中: [ OK ]
postgresql サービスを開始中: [ OK ]
[root@queen-centos ~]#
pldbgapi.sql を読み込んで、デバッグ用の型と共有ライブラリへのコネクタを定義し、PL/pgSQL 言語を組み込めば、サーバ側は準備完了です。
[root@queen-centos ~]# psql -h queen-centos.priv -p 5432 -U pgtest pgtest ユーザ pgtest のパスワード: psql (8.4.4) "help" でヘルプを表示します. pgtest=# \i /usr/share/pgsql/contrib/pldbgapi.sql (中略) pgtest=# create language 'plpgsql'; CREATE LANGUAGE pgtest=# \q [root@queen-centos ~]#
なお、下記で CVS からのソースの anonymous ダウンロードができます:
[root@queen-centos ~]# yum install -y cvs (中略) [root@queen-centos ~]# cvs \ -d :pserver:anonymous@cvs.pgfoundry.org:/cvsroot/edb-debugger login [root@queen-centos ~]# cvs \ -d :pserver:anonymous@cvs.pgfoundry.org:/cvsroot/edb-debugger checkout server [root@queen-centos ~]#
バージョン違いでビルドできない場合:
edb-debugger のソースは、本来は PostgreSQL のソースツリーの contrib/ に入れてビルドするものですが、今回は postgresql84-server をそのまま使いたかったので、分離してあります。しかし、postgresql84-devel パッケージは、残念ながら PL/pgSQL のヘッダを含んでいませんので、上記 SRPM は、postgresql84 の SRPM から持ってきた plpgsql.h を含んでいます。そのため、本体 (postgresql84) のマイナーバージョンが進んだら、適宜ヘッダファイルを更新して作り直す必要があります。
参考:
なお、これらの手順が面倒で、なおかつ RPM でのパッケージ管理がなくても良いのであれば、下記よりダウンロードできる EnterpriseDB 社の Postgres Plus のパッケージを入れるのも手です:
デバッガの開発元ですので、普通にデバッガを利用できる状態でインストールできます。
pgAdmin-III のインストール
PostgreSQL の GUI クライアントである pgAdmin-III は CentOS の標準レポジトリに入っていませんので、EPEL から入れます。この例では、別のホストにインストールしています。
[root@queen-centos2 ~]# rpm -Uvh $(printf \
ftp://download.fedora.redhat.com/pub/epel/%s/%s/epel-release-*-*.noarch.rpm \
$(rpm -q --qf "%{version}" $(rpm -q --whatprovides redhat-release)) \
$(uname --hardware-platform) )
(中略)
[root@queen-centos2 ~]# yum install -y pgadmin3
(中略)
[root@queen-centos2 ~]#
参考:
デバッグをしてみる
メニューから pgAdmin-III を実行します:
データベースに接続し、適当なストアドプロシージャかトリガを作成します。そこにブレークポイントを設定します:
その関数がどこかから呼ばれるまで待機します:
関数が呼ばれると実行が停止され、ステップ実行が可能になります:




[...] About « CentOS で PL/pgSQL デバッガ [...]