pg_repack/doc/pg_repack-ja.html
2012-11-10 22:33:57 +00:00

355 lines
16 KiB
HTML
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>pg_repack</title>
<link rel="home" title="pg_repack " href="index.html">
<link rel="stylesheet" TYPE="text/css" href="style.css">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h1 id="pg_repack">pg_repack 1.1.7</h1>
<div class="navigation">
<a href="index-ja.html">Top</a> &gt;
<a href="pg_repack-ja.html">pg_repack</a>
</div>
<hr>
<div class="index">
<ol>
<li><a href="#name">名前</a></li>
<li><a href="#synopsis">概要</a></li>
<li><a href="#description">説明</a></li>
<li><a href="#examples">使用例</a></li>
<li><a href="#options">オプション</a></li>
<li><a href="#environment">環境変数</a></li>
<li><a href="#restrictions">使用上の注意と制約</a></li>
<li><a href="#details">詳細</a></li>
<li><a href="#install">インストール方法</a></li>
<li><a href="#requirement">動作環境</a></li>
<li><a href="#releases">更新履歴</a></li>
<li><a href="#seealso">関連項目</a></li>
</ol>
</div>
<h2 id="name">名前</h2>
pg_repack -- PostgreSQLデータベース内のテーブルに対して、参照/更新処理をブロックせずに再編成を行います。
<h2 id="synopsis">概要</h2>
<p>
pg_repack [OPTIONS]
</p>
<p>オプション OPTIONS には以下を指定できます。
詳細は<a href="#options">オプション</a>を参照してください。</p>
<ul>
<li>固有オプション<ul>
<li>-a, --all : 全てのデータベースに対して実行します</li>
<li>-o [--order-by] columns [,...]</li>
<li>-n [--no-order]</li>
<li>-t [--table] table</li>
<li>-T [--wait-timeout] seconds</li>
<li>-Z [--no-analyze]</li>
</ul></li>
<li>接続オプション<ul>
<li>-d, --dbname=DBNAME : 接続するデータベース</li>
<li>-h, --host=HOSTNAME : データベースサーバホスト、またはソケットディレクトリ</li>
<li>-p, --port=PORT : データベースサーバのポート</li>
<li>-U, --username=USERNAME : このユーザとして接続します</li>
<li>-w, --no-password : パスワードの入力を促しません</li>
<li>-W, --password : パスワード入力を強制します</li>
</ul></li>
<li>一般オプション<ul>
<li>-e, --echo : サーバに送信するSQLを表示します</li>
<li>-E, --elevel=LEVEL : ログ出力レベルを設定します</li>
<li>--help : ヘルプを表示し、終了します</li>
<li>--version : バージョン情報を出力し、終了します</li>
</ul></li>
</ul>
<h2 id="description">説明</h2>
<p>pg_repack は、PostgreSQLデータベース内のテーブルを再編成(行の並び替え)するユーティリティです。
<a href="http://www.postgresql.jp/document/current/html/app-clusterdb.html">clusterdb</a> と異なり、参照/更新処理をブロックしません。
再編成の方式として、以下のいずれか1つを選択できます。</p>
<ul>
<li>オンライン CLUSTER (cluster index順に行を並び替える)</li>
<li>ユーザの指定した順に行を並び替える</li>
<li>オンライン VACUUM FULL (行の詰め合わせを行う)</li>
</ul>
<p>このユーティリティを使用するためには、以下のことに注意をしてください。</p>
<ul>
<li>このユーティリティは、スーパーユーザのみが実行することができます。</li>
<li>対象のテーブルはPRIMARY KEYを持っている必要があります。</li>
</ul>
<h2 id="examples"></h2>
<p>testというデータベースをオンライン CLUSTER するには、下記のコマンドを実行します。</p>
<PRE><SAMP>$ </SAMP><KBD>pg_repack test</KBD></PRE>
<p>testという名前のデータベースのfooという1つのテーブルに対してオンライン VACUUM FULL を行うには、下記のコマンドを実行します。</p>
<PRE><SAMP>$ </SAMP><KBD>pg_repack --no-order --table foo -d test</KBD></PRE><p>
</p>
<h2 id="options">オプション</h2>
<p>pg_repack では、下記のコマンドライン引数を指定できます。</p>
<h3>固有オプション</h3>
<p>pg_repack を実行する対象と並び替えの基準を指定するパラメータです。
何も指定されていない場合は、cluster index順にオンライン CLUSTER を行います。
この2つを同時に指定することはできません。
</p>
<dl>
<dt>-n<br>--no-order</dt>
<dd>オンライン VACUUM FULL の処理を行います。</dd>
<dt>-o columns [,...]<br>
--order-by columns [,...]</dt>
<dd>指定したカラムをキーにオンライン CLUSTER を行います。</dd>
<dt>
-t table<br>
--table=table
</dt>
<dd>オンライン CLUSTER 、または、オンライン VACUUM FULL を行うテーブルを指定します。
このオプションが指定されていない場合は、対象となったデータベースに存在する全ての対象テーブルに対して処理を行います。
</dd>
<dt>
-T seconds<br>
--wait-timeout=seconds
</dt>
<dd>
再編成完了直前に一瞬だけ排他ロックを取得しますが、この排他ロックが取得できるまで待機する秒数を指定します。
この秒数が経過してもロックが取得できない場合には、対象のテーブルにアクセスしている他の全てのクエリを取り消します。
また、サーバのバージョンが 8.4 またはそれ以降の場合には、指定した秒数の2倍経過してもロックを取得できない場合には、強制的に切断します。
デフォルトは60秒です。
</dd>
<dt>-Z<br>--no-analyze</dt>
<dd>再編成後に ANALYZE を行いません。
このオプションが指定されていない場合は、再編成後に ANALYZE します。</dd>
</dl>
<h3>接続オプション</h3>
<p>
PostgreSQLに接続するためのパラメータです。
--allと--dbnameまたは--tableを同時に指定することはできません。
</p>
<dl>
<dt>-a<br>--all</dt>
<dd>対象となる全てのデータベースに対してオンライン CLUSTER、または、オンラインVACUUM FULLを行います。</dd>
<dt>
-d DBNAME<br>
--dbname=DBNAME
</dt>
<dd>オンライン CLUSTER、または、オンライン VACUUM FULL を行うデータベース名を指定します。
データベース名が指定されておらず、-aまたは--allも指定されていない場合、
データベース名はPGDATABASE環境変数から読み取られます。
この変数も設定されていない場合は、接続時に指定したユーザ名が使用されます。</dd>
<dt>-h HOSTNAME<br>
--host=HOSTNAME</dt>
<dd>サーバが稼働しているマシンのホスト名を指定します。ホスト名がスラッシュから始まる場合、Unixドメインソケット用のディレクトリとして使用されます。</dd>
<dt>-p PORT<br>
--port=PORT</dt>
<dd>サーバが接続を監視するTCPポートもしくはUnixドメインソケットファイルの拡張子を指定します。</dd>
<dt>-U USERNAME<br>
--username=USERNAME</dt>
<dd>接続するユーザ名を指定します。</dd>
<dt>-w<br>
--no-password</dt>
<dd>
パスワードの入力を促しません。
サーバがパスワード認証を必要とし、かつ、.pgpassファイルなどの他の方法が利用できない場合、接続試行は失敗します。
バッチジョブやパスワードを入力するユーザが存在しない場合にこのオプションは有用かもしれません。
</dd>
<dt>-W<br>
--password</dt>
<dd>データベースに接続する前に、強制的にパスワード入力を促します。</dd>
<dd>
サーバがパスワード認証を要求する場合 自動的にパスワード入力を促しますので、これが重要になることはありません。
しかし、サーバにパスワードが必要かどうかを判断するための接続試行を無駄に行います。
こうした余計な接続試行を防ぐために -W の入力が有意となる場合もあります。
</dd>
</dl>
<h3>一般オプション</h3>
<dl>
<dt>-e<br>--echo</dt>
<dd>サーバに送信するSQLを表示します。</dd>
<dt>-E<br>--elevel</dt>
<dd>ログ出力レベルを設定します。
DEBUG, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, PANIC から選択します。
デフォルトは INFO です。</dd>
<dt>--help</dt>
<dd>使用方法について表示します。</dd>
<dt>--version</dt>
<dd>バージョン情報を表示します。</dd>
</dl>
<h2 id="environment">環境変数</h2>
<dl>
<dt>
PGDATABASE<br>
PGHOST<br>
PGPORT<br>
PGUSER
</dt>
<dd>デフォルトの接続パラメータです。</dd>
</dl>
<p>
また、このユーティリティは、他のほとんどの PostgreSQL ユーティリティと同様、libpq でサポートされる環境変数を使用します。詳細については、<a href="http://www.postgresql.jp/document/current/html/libpq-envars.html">環境変数の項目</a>を参照してください。
</p>
<h2 id="diagnostics">トラブルシューティング</h2>
<p>pg_repack の実行に失敗した場合にエラーが表示されます。
想像されるエラー原因と対処を示します。</p>
<p>致命的なエラーで終了した場合、手動によるクリーンアップを行う必要があります。
クリーンアップは、エラーが発生したデータベースに対して、$PGHOME/share/contrib/uninstall_pg_repack.sql を実行し、その後、$PGHOME/share/contrib/pg_repack.sql を実行します。</p>
<dl>
<dt>pg_repack : repack database "template1" ... skipped</dt>
<dd>--allオプションを指定した際に、pg_repack がインストールされていないデータベースに対して表示されます。</dd>
<dd>pg_repack スキーマのインストールを行ってください。</dd>
<dt>ERROR: pg_repack is not installed</dt>
<dd>--dbnameで指定したデータベースにpg_repack がインストールされていません。</dd>
<dd>pg_repack のインストールを行ってください。</dd>
<dt>ERROR: relation "table" has no primary key</dt>
<dd>指定したテーブルにPRIMARY KEYが存在していません。</dd>
<dd>対象のテーブルにPRIMARY KEYの作成を行ってください。(ALTER TABLE ADD PRIMARY KEY)</dd>
<dt>ERROR: relation "table" has no cluster key</dt>
<dd>指定したテーブルに CLUSTER KEYが存在していません。</dd>
<dd>対象のテーブルに CLUSTER KEYの作成を行ってください。(ALTER TABLE CLUSTER)</dd>
<dt>pg_repack : query failed: ERROR: column "col" does not exist</dt>
<dd>--order-by で指定したカラムが対象のテーブルに存在していません。</dd>
<dd>対象のテーブルに存在するカラムを指定してください。</dd>
<dt>ERROR: permission denied for schema repack</dt>
<dd>操作を行おうとした対象に権限がありません。</dd>
<dd>スーパーユーザで操作を行ってください。</dd>
<dt>pg_repack : query failed: ERROR: trigger "z_repack_trigger" for relation "tbl" already exists</dt>
<dd>操作を行おうとした対象にpg_repack が処理のために作成するトリガと同名のものが存在しています。</dd>
<dd>トリガの改名か削除を行ってください。</dd>
<dt>pg_repack : trigger conflicted for tbl</dt>
<dd>操作を行おうとした対象にpg_repack が処理のために作成するトリガより後に実行されるトリガが存在しています。</dd>
<dd>トリガの改名か削除を行ってください。</dd>
</dl>
<h2 id="restrictions">使用上の注意と制約</h2>
<p>pg_repack を使用する際には、以下の制約があります。以下の制約に関する操作を行った場合の動作は保証されません。注意してください。</p>
<h3>一時テーブルへの操作</h3>
<p>pg_repack では、一時テーブルは操作の対象外です。</p>
<h3>GiSTインデックスの使用</h3>
<p>インデックス種別がGiSTとなっているインデックスがクラスタインデックスとなっている
テーブルはpg_repack コマンドを使用して操作を行うことはできません。
これは、GiSTインデックスのソート順序は一意ではないため、ORDER BYによる
ソートが行えないためです。</p>
<h3>DDLコマンドの発行</h3>
<p>
pg_repack の実行中には、VACUUM と ANALYZE <STRONG>以外</STRONG> のDDL操作は行わないでください。
多くの場合、pg_repack は失敗しロールバックされます。
しかし、以下の操作ではデータが破損するため、非常に危険です。
</p>
<dl>
<dt>TRUNCATE</dt>
<dd>削除した行が pg_repack 実行後には復元しています。操作結果が消失します。</dd>
<dt>CREATE INDEX</dt>
<dd>スワップされない索引が残る可能性があります。データの不整合が生じます。</dd>
<dt>ALTER TABLE ... ADD COLUMN</dt>
<dd>追加された値が全てNULLに置換されてしまう可能性があります。データが消失します。</dd>
<dt>ALTER TABLE ... ALTER COLUMN TYPE</dt>
<dd>実行するとスキーマで定義された型と実際の格納状態に齟齬をきたします。データの不整合が生じます。</dd>
<dt>ALTER TABLE ... SET TABLESPACE</dt>
<dd>pg_repack 実行後にrelfilenodeとの不整合が起こるため、対象のテーブルに対する参照/更新操作時にエラーが発生します。</dd>
</dl>
<h2 id="details">詳細</h2>
<p>pg_repack は repack スキーマに作業用テーブルを作成し、そこでデータの並び替えを行います。
最後にシステムカタログを直接書き換えることで、元のテーブルと名前を交換しています。</p>
<h2 id="install">インストール方法</h2>
<p>
UNIX や Linux では、make を実行すると自動的に pgxs を使ってビルドできます。
前もって PostgreSQL 開発用パッケージ (postgresql-devel 等) をインストールし、pg_config にパスを通してください。
</p>
<pre>$ cd pg_repack
$ make
$ su
$ make install</pre>
<p>
Windows では Microsoft Visual C++ 2010 でビルドできます。
msvc フォルダ内にプロジェクトファイルがあります。
</p>
<p>その後、データベースに関数を登録します。</p>
<pre>$ pg_ctl start
$ psql -f $PGSHARE/contrib/pg_repack.sql -d your_database</pre>
<p>(注意: <code>CREATE EXTENSION</code> はまだサポートしていません。)</p>
<h2 id="requirement">動作環境</h2>
<dl>
<dt>PostgreSQLバージョン</dt>
<dd>PostgreSQL 8.2, 8.3, 8.4, 9.0, 9.1, 9.2</dd>
<dt>OS</dt>
<dd>RHEL 5.2, Windows XP SP3</dd>
<dt>ディスク容量</dt>
<dd>処理対象のテーブル、インデックスサイズの2倍以上のディスク空き容量 (対象が1GBならば、さらに追加で2GB)</dd>
</dl>
<h2 id="releases">更新履歴</h2>
<ul>
<li>1.1.7 (2011-08-07)<ul>
<li>バグ修正: DROPされた列を持つテーブルを再編成した場合に、そのテーブルを使用するビューや関数が破損する可能性があった。</li>
<li>PostgreSQL 9.1, 9.2dev のサポート (EXTENSION はまだ)</li>
</ul></li>
</ul>
<h2 id="seealso">関連項目</h2>
<a href="http://www.postgresql.jp/document/current/html/app-clusterdb.html">clusterdb</a>,
<a href="http://www.postgresql.jp/document/current/html/app-vacuumdb.html">vacuumdb</a>
<hr>
<div class="navigation">
<a href="index-ja.html">Top</a> &gt;
<a href="pg_repack-ja.html">pg_repack</a>
</div>
<p class="footer">
Portions Copyright (c) 2008-2011, NIPPON TELEGRAPH AND TELEPHONE CORPORATION<br>
Portions Copyright (c) 2011, Itagaki Takahiro
</p>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-10244036-4");
pageTracker._trackPageview();
} catch(err) {}</script>
</body>
</html>