資料編:Ubuntu特有のPostgreSQL用コマンド

資料編:Ubuntu特有のPostgreSQL用コマンド

このページでは、Ubuntu特有のPostgreSQLのコマンドのマニュアルを紹介します。

1. pg_wrapper (1)

名前

pg_wrapper - PostgreSQLのクライアントコマンドのラッパ

概要

client-program [--cluster version/cluster] [...]

ここで、client-programにはPostgreSQLの次のコマンド名を指定します。

clusterdb, createdb, createlang, createuser, dropdb, droplang, dropuser, pg_dump, pg_dumpall, pg_restore, psql, reindexdb, vacuumdb

実際には、/usr/bin ディレクトリに上記の名前のシンボリックリンクが作られ、 これらはすべて pg_wrapper を参照するようになっています。

説明

概要で説明した各プログラムからのシンボリックリンクのターゲットになっているプログラムです。 ユーザ毎のクラスタとデータベースのの設定を調べ、所望のプログラムの所望のバージョンのものを呼び出します。 指定されたオプションをつけて指定されたコマンドを実行します。

ターゲットになるクラスタは次の順序で決めます。

  1. --cluster オプションで明示的に指定されていれば、それを使います。
  2. PGCLUSTER 環境変数が設定してあれば、この設定値を使います。
  3. ~/.postgresqlrc ファイルがあれば、その設定値を使います。
  4. /etc/postgresql-common/user_cluster ファイルがあれば、その設定値を使います。
  5. 存在するデータベースクラスタが一つだけなら、それを使います。
  6. 複数のデータベースクラスタがある場合は、デフォルトの 5432 ポートで監視しているデータベースクラスタを使います。

上記でデータベースクラスタが決まらない場合はエラーになります。

オプション

--cluseter version/cluster
クラスタはローカルなクラスタ名か、あるいは host:port の形式でリモートのクラスタを指定します。 port を省略するとデフォルトの 5432 を使います。

環境変数

PGCLUSTER
$PGCLUSTER が設定してあると、これを使ってターゲットのバージョンとクラスタを決めます。 設定値の形式は version/cluster です。

ファイル

/etc/postgresql-common/user_clusters
各ユーザとグループが使用するデフォルトのデータベースクラスタとデータベースを格納します。設定は管理者が行います。
$HOME/.postgresqlrc
ユーザ自身で設定するデフォルトを格納します。

関連項目

user_clusters(5), postgresqlrc(5)

著者

Martin Pitt

2. pg_lsclusters(1)

名前

pg_lsclusters - PostgreSQLのすべてのクラスタに関する情報を表示します。

概要

pg_lsclusters [options]

説明

このコマンドはすべてのクラスタの設定と状態に関する情報を表示します。

オプション

-h, --no-header
カラムヘッダ行を表示しません。

著者

Martin Pitt

3. pg_createcluster (1)

名前

pg_createcluster - 新たなPostgreSQLクラスタを作成します。

概要

pg_createcluster [options] version name

説明

pg_createcluster は新たな PostgreSQL サーバクラスタ (postmaster(1) インスタンスで提供するデータベースの集まり) を作成し、これを postgresql-common パッケージのマルチバージョン/マルチクラスタアーキテクチャに統合します。

各クラスタはバージョンと名前で識別します。名前は任意のものがつけられます。 サーバパッケージをインストールした際に生成するデフォルトのクラスタの名前は main です。 しかし、試験用に別なスーパーユーザで、あるいは共有サーバ上で各ユーザ毎に新たなクラスタを生成する必要がある場合もあります。 同じバージョンに既に同じ名前のクラスタが存在する場合は pg_createclusterはエラーで失敗します。

PostgreSQLのメジャーバージョン (例えば、"7.4" や "8.0") とクラスタ名を与えると、pg_createcluster は/etc/postgreql/version/name に必要な設定ファイルを作成します。 これらの設定ファイルはpg_ident.conf, pg_hba.conf(起動制御を参照), postgreSQL の共通の設定ファイル、及びログファイルを指しているシンボリックリンク (デフォルトでは /var/log/postgresql/postgresql-version-name.log) です。

8.1以前のサーバのpg_autovacuumとの統合を容易にするために、pg_createcluster はシンボリックリンク autovacuum_log を作成します。これは pg_autovacuum ログファイルを指しています(デフォルトでは /var/log/postgresql/pg_autovacuum-version-name.log です)。 PostgreSQL8.1及びそれ以降のバージョンではautovacuumはサーバに統合されているのでこれは必要ありません。

postgresql.conf ではポート番号は次に利用可能なものに自動的に割り当てられます。 この番号は既存のクラスタでまだ使われていないポート番号(5432で始まる)になります。

データディレクトリが存在しない場合はPostgreSQLのinitdb(1)コマンドを使って新たなクラスタ構造を作成します。 データディレクトリが既に存在している場合は設定ファイルを移動して data_directory オプションを設定することで、 既存のデータディレクトリをpostgresql-common 構造に統合することができます。 これはデータディレクトリを直接 initdb を使って生成した場合にしかうまくいかないことを知っていてください。 すなわち、すべての設定ファイル (postgresql.conf等)はデータディレクトリに存在していなければならなりません。

カスタムソケットディレクトリが指定され、これが存在しない場合は作成します。

ログファイルが存在しない場合、これを作成します。 どの場合でも、クラスタの所有者が書き込みができるようにアクセス権の調整を行います。 postgresql.conf をカスタマイズして、log_directoryやlog_filename を指定できることに注意してください。 これらのオプションのどれかが存在すると、クラスタ設定ディレクトリでのログへのシンボリックリンクは無視されま す。

デフォルトの snakeoil SSL 証明 (/etc/ssl/certs/ssl-cert-snakeoil.peom 及び /etc/ssl/private/ssl-cert-cnakeoil.key) が存在する場合、pg_createcluster はデータディレクトリ中にこれらのファイルへのシンボリックリンクを作成します (server.crt 及び server.key)。そして当該クラスタからSSLを使えるようにします (postgresql.conf の ssl オプション)。そこで、すべてのクラスタはデフォルトでは同じSSL証明を使うようになります。 もちろん、これらのシンボリックリンクをクラスタ個別の証 明で置き換えても構いません。

オプション

-u user, --user=user
クラスタを所有し、データベースのスーパーユーザになるユーザを、指定した名前あるいはuid に設定します。 デフォルトでは postgres ユーザです。 クラスタはrootの持ち物であってはなりません。
-g group, --group=group
クラスタ関連のデータファイルのグループを変更します。デフォルトは、データベース所有者のプライマリグループになります。
-d dir, --datadir=dir
実際にすべてのデータベーステーブルを格納するのに使うデータでディレクトリを明示的に指定します。 これは巨大になる可能性があります (実際にクラスタに格納されるデータ量の5倍程度にすぐなってしまいます)。デフォルトは /var/lib/postgresql/version/cluster です。
-s dir, --socketdir=dir
ローカル接続用にpostmaster(1) サーバがUnixソケットを格納するディレクトリを明示的に設定します。デフォルトは、postgres ユーザが所有するクラスタの場合は /var/run/postgresql/、それ以外のユーザが所有するデータベースの場合は /tmp です。/tmp ディレクトリは安全ではなく、誰でもソケットを生成でき、データベースになりかわることができることに知っていてください。指定したディレクトリが存在し ない場合、適当なアクセス権限を持つディレクトリを生成します。
-l path, --logfile=path
postmaster(1) サーバログファイルへのパスを明示的に設定します。デフォルトは /var/log/postgresql/postgresqll-version-cluseter.log です。
--locale=locale
データベースクラスタのデフォルトのlocale を設定します。これが指定されていない場合、locale は pg_createcluster が実行する環境から継承されます。
--lc-collocate=locale
--lc-lctype=locale
--lc-messages=locale
--lc-monetary=locale
--lc-numeric=locale
--lc-time=locale
--localeと同じですが、特定のカテゴリのlocaleを設定します
-e encoding, --encoding=encoding
テンプレートデータベースの文字コードを選択します。今後生成するデータベースで明示的に文字コードを指定しない場合はこの値がデフォルトの文字コードとな ります。デフォルトはlocaleから導きますが、導けない場合は SQL_ASCII になります。PostgreSQLがサポートする文字セットはPostgreSQLのドキュメントに記述されています。
:このオプションは直接指定することは推奨しません。 そのかわり、loacle を設定してください。
-p port, --port=port
新たなクラスタが監視する(Unixソケット及びTCPポートの)ポートを選択します。これは1024と65535の間でなければなりません。 PostgreSQLがrootとして実行されることはなく、そこで優先ポートでないポートが必要だからです。デフォルトでは、5432から始まり、次に 使用されていないポートを割り当てます。
--start
クラスタを生成した直後にサーバを開始します (つまり、pg_ctlcluster version cluster start を実行します)。デフォルトではクラスタの実行は開始しません。
--start-conf=auto|manual|disabled
start.conf 構成ファイルの初期値を指定します。下記の開始制御を参照してください。デフォルトは auto であり、クラスタは /etc/init.d/postgresql-version で処理します。すなわち、システムブート時に自動的に開始終了するようにします。

開始制御

クラスタ設定ディレクトリにあるstart.conf ファイルを用いてこのクラスタのpostmasterプロセスの開始終了の振舞を制御します。このファイルには、コメント行('#' で始まる)、空行を入れることができますが、次のキーワードのうちの一つを正確に書いておかなければならりません。

auto
postmasterプロセスはinitスクリプトで起動/終了します。start.conf ファイルがない場合はこれがデフォルトのふるまいになります。
manual
postmasterプロセスはinitスクリプトでは処理しませんが、pg_ctlcluster(1) を用いた手動制御が許されています。
disable
クラスタの開始終了でinitスクリプトを用いたり、pg_ctlcluster(1) を用いることはできません。しかし、クラスタの所有者が低水準のツールを使ってpostmasterプロセスを制御することを禁止しているわけではないこ とを知っておいてください。このオプションはメンテナンス中の事故を防ぐためのもので、それ以上のものではありません。

関連項目

pg_ctlcluster(8), pg_lsclusters(1), pg_wrapper(1)

著者

Martin Pitt

4. pg_ctlcluster (1)

名前

pg_ctlcluster - PostgreSQL クラスタの開始/終了/再開/リロードを行います

概要

pg_cluster [options] cluster-version cluster-name action

ここで、action = start|stop|restart|reload|autovac-start|autovac-stop|autovac-restart です。

説明

このプログラムは特定のクラスタのpostmasterを制御します。このコマンドの本質はpg_ctl(1) コマンドのラッパーです。 pg_ctlcluster はクラスタのバージョンとデータパスを決め、適切な設定パラメータとパスをつかって適切なバージョンのpg_ctl を呼び出します。

このプログラム開始するにはデータベースクラスタの所有者あるいは root でなければなりません。

アクション

start
指定された特定のクラスタ用のログファイルがない場合にはこれを生成し (デフォルトは /var/log/postgresql/postgresql-cluster-version-clusetr-name.log です)、これを使って PostgreSQL のサーバプロセス(postmaster(1)) を起動します。 パッケージ postgresql-contrib-version がインストールされていれば、pg_autovacuum プロセスも開始します(ただし、/etc/postgresql-common/autovacuum.conf あるいはクラスタ毎のautovacuum.conf ファイルでautovacuum が無効になっていない場合です)。 サーババージョンが 8.1 及びそれ以降では内部でautovacuum が実行されることに注意してください。 成功すれば0を、既にサーバが実行中であれば 2 を、また、他のエラーが発生した場合には1を返します。
stop
指定されたクラスタのpostmaster(1) サーバ(そして、動いていればpg_autovacuum)を停止します。 デフォルトでは "smart" モードを使います。こうすると postmaster はクライアントが切断するまで停止を待ちます。
--force
オプションを使うと "fast" モードが使われるようになり、実行中のトランザクションをロールバックし、クライアントを直ちに切断し、きれいな状態でサーバのシャットダウンを行います。 もしこれが動作しない場合は、"immediate" モードを用いてシャットダウンを再試行します。 この状況ではクラスタは一貫した状態ではなくなるので、次にサーバを開始した場合にはリカバリが実行されます。 このモードでも終了できない場合は、このプログラムはpostmasterプロセスをkillします。 成功時には0を、サーバが実行中でない場合は2を、それ以外のエラーが起こった場合は1を返します。 このモードはマシンをシャットダウンする場合にのみ使うべきです。
restart
もしサーバが実行中であればこれを停止し、(再)起動します。 当該サーバで pg_autovacuumが実行中の場合は、これも再開します。
reload
サーバを完全にシャットダウンせずに設定ファイルを読み込みなおします。
autovac-start
実行中サーバでpg_autovacuumプロセスを開始します。これは通常startで自動的に行われます。 このコマンドはPostgreSQL 8.1及びそれ以降のバージョンでは失敗します。autovacuum が内部的に実行されるからです。
autovac-stop
実行中クラスタのpg_autovacuumプロセスを終了させます。これは通常stopで自動的に行われます。 このコマンドはPostgreSQL 8.1 およびそれ以降のバージョンでは失敗します。autovacuum が内部的に実行されるからです。

オプション

-o option
指定したoptionをpostmasterのコマンド行オプションとしてそのまま渡します。

関連項目

pg_ctl(1), pg_wrapper(1), pg_lsclusters(1), postmaseter(1)

著者

Martin Pitt

5. pg_upgradecluster(8)

名前

pg_upgradecluster - 既存の PostrgreSQL クラスタを新しいメジャーバージョンにアップグレードします。

概要

pg_upgradecluster [-v newversion] version name [newdatadir]

説明

pg_upgradecluster は既存のPostgreSQL サーバクラスタ (つまり、一つのpostmasterインスタンスで扱うデータベースの集まり) を newversion (デフォルトは利用可能な最新のバージョン)で指定した新しいバージョンにアップグレードします。 古いバージョンの設定ファイルは新しいクラスタにコピーします。

アップグレードしたバージョンで元のポートを使用するので、古いバージョンのクラスタではそれまで使われていないポートを使用するように設定されます。 アップグレード後は新しいクラスタがきちんと動作するかどうかを確認してください。 きちんと動作していれば、pg_dropcluster(8)を使って古いクラスタを削除します。

newdatadir引数は、デフォルト以外のディレクトリをアップグレードしたクラスタで使用する場合に使います。 これはpg_createclusterに渡されます。 この指定がない場合、デフォルトは/var/lib/postgresql/version/name になります。

フックスクリプト

PostGIS といったPostgreSQLの拡張では外部テーブルにメタデータを格納するものがあり、これも古いバージョンからアップグレードしなければなりませんが、テーブルデータをコピーする前に新しいバージョン用に初期化も必要となります。 この目的のために、これらの拡張(及び管理者管理者)はアップグレードフックのスクリプトを /etc/postgresql-common/pg_upgradecluster.d/ に置いておくことができます。 このディレクトリ上のスクリプトは次の引数で呼び出されます。

<old version> <cluster name> <new version> <phase>

ここで、phase は次の値をとります。

init
何も入っていないnew versionのバージョンのクラスタが生成された、 すなわち、このクラスタにはすでに template1 があるが、ユーザデータベースはまだないことを示しています。
finish
古いバージョンのクラスタのすべてのデータが新しいクラスタのdump/reloadされたことを示します。古いクラスタはまだ存在しています。

これらのスクリプトはデータベース所有者の資格で呼び出されます。

関連項目

pg_createcluster(8), pg_dropcluster(8), pg_lsclusters(1), pg_wrapper(1)

著者

Martin Pitt

6. pg_dropcluster (8)

名前

pg_dropcluster - PostgreSQL のクラスタを完全に削除します。

概要

pg_dropcluster [--stop] cluseter-version cluster-name

説明

このプログラムは指定したPostgreSQLクラスタに属するファイルをすべて削除します。これには pg_createcluster(1) で作成したデータディレクトリ、ログファイル、すべての設定ファイルが含まれます。もし設定ディレクトリ (/etc/postgresql/version/cluster) がこのプログラムの実行後に空になった場合、このディレクトリも削除します。/var/run/postgresql あるいは /tmp 以外の空のソケットディレクトリも削除します。

通常実行中のサーバがあるようなクラスタが削除されることはありません。 これを無効にするため、--stop オプションを使うとファイルの削除の前に強制的にサーバをシャットダウンします。

関連項目

pg_creatcluster(1), pg_ctlcluster(1)

著者

Martin Pitt