PostgreSQL Study (3)

今回はコマンド(実行ファイル)が格納されるディレクトリについて。
とはいえパッケージでインストールしているので Ubuntu ベースの話になります。

initdb や vacuumdb、psql など PostgreSQL の主なコマンドは 以下のディレクトリに格納されます。

/usr/lib/postgresql/9.1/bin
$ ls -F /usr/lib/postgresql/9.1/bin
clusterdb*   pg_basebackup*   pg_upgrade*
createdb*    pg_controldata*  postgres*
createlang*  pg_ctl*          postmaster@
createuser*  pg_dump*         psql*
dropdb*      pg_dumpall*      reindexdb*
droplang*    pg_resetxlog*    vacuumdb*
dropuser*    pg_restore*
initdb*      pg_test_fsync*

複数のバージョンが 1 つのマシンで稼動することがあるため コマンドも複数のバージョンが格納できるように サブディレクトリが分かれます。

ただ、実際は /usr/lib/postgresql/9.1/bin には パスが通っておらず /usr/bin 以下にあるリンクファイルを起動することになります。

/usr/bin
$ ls -F /usr/bin
(PostgreSQL 関連のみ抜粋)
clusterdb@   pg_basebackup@     pg_lsclusters@
createdb@    pg_config@         pg_restore@
createlang@  pg_createcluster@  pg_upgradecluster@
createuser@  pg_ctlcluster@     psql@
dropdb@      pg_dropcluster@    reindexdb@
droplang@    pg_dump@           vacuumdb@
dropuser@    pg_dumpall@        vacuumlo@

このように /usr/bin/ 以下のコマンドはリンクになっています。
(例外として initdb はリンクがありません)

$ readlink -f /usr/bin/vacuumdb
/usr/share/postgresql-common/pg_wrapper

また、各コマンドは直接 /usr/lib/postgresql/9.1/bin 以下の ファイルにリンクするのではなく 以下のファイルにリンクしています。

/usr/share/postgresql-common/pg_wrapper

pg_wrapper は Perl のスクリプトです。

$ file /usr/share/postgresql-common/pg_wrapper
/usr/share/postgresql-common/pg_wrapper: Perl script, ASCII text executable

前述したように 1つのマシン内で複数のバージョンが稼動することができるため 一旦この pg_wrapper で、コマンドを受けて、環境変数などから適切なバージョンの コマンドを起動するようになっているわけです。

Google サイト内検索

Amazonアソシエイト