web-dev-qa-db-ja.com

postgresql pg_ *コマンドの特定のバージョン(8.4、9.1)を実行する方法(例:pg_dump)

Postgresqlバージョン8.4および9.1がインストールされています。特定のPostgresqlコマンドについて、実行するコマンドの特定のバージョンを指定するにはどうすればよいですか? (例:psqlpg_dumppg_ctlclusterpg_restore、...)

私の質問は、8.4から9.1へのアップグレードの準備としてpg_dumpを実行したいという動機であり、実行しているpg_dumpのバージョンを知りたいです。

私はUbuntu 10.04 Nattyで実行しています。

11
Rob Bednark

Ubuntuを使用していて、Martin Pittのpg_wrapperがインストールされており(pg_ctlclusterから判断すると)、パッケージ postgresql-common によって提供され、標準のDebianパッケージが付属しています。私は Debianでも同じ を使用します。

Linuxシステムでは、シェルでwhichを実行して、実際に選択されている実行可能ファイルを確認します。

postgres@db:~$ which pg_dump
/usr/bin/pg_dump
postgres@db:~$ ls -l /usr/bin/pg_dump
lrwxrwxrwx 1 root root 37  4. Jun 18:57 /usr/bin/pg_dump -> ../share/postgresql-common/pg_wrapper

pg_dumpは実際にはpg_wrapperへのシンボリックリンクであり、pg_dumpを実行するdbクラスターのクライアントプログラムの適切なバージョンを動的に選択します。 pg_wrapperのmanページを引用します:

このプログラムは、/ usr/lib/postgresql/version/bin内のPostgreSQLプログラムに対応する名前へのリンクとしてのみ実行されます。ユーザー用に構成されたクラスターとデータベースを決定し、目的のプログラムの適切なバージョンを呼び出してそのクラスターとデータベースに接続し、指定されたオプションをそのコマンドに提供します。

   The target cluster is selected by the following means, in descending order of precedence:
   1.  explicit specification with the --cluster option
   2.  explicit specification with the PGCLUSTER environment variable
   3.  matching entry in ~/.postgresqlrc (see postgresqlrc(5)), if that file exists
   4.  matching entry in /etc/postgresql-common/user_clusters (see user_clusters(5)), if that file exists
   5.  If only one local cluster exists, that one will be selected.
   6.  If several local clusters exist, the one listening on the default port 5432 will be selected.

   If none of these rules match, pg_wrapper aborts with an error.

IOW、適切なバージョンが自動的に選択されるはずです-何らかの方法でインストールを台無しにしない限り。特定のオプション--clusterをいつでも追加できます。

15

私が使う

PGCLUSTER=8.4/main pg_dump ...
PGCLUSTER=9.1/main pg_dump ...
4
Gavriel