- Add wait-timeout option and use SET statement_timeout instead of NOWAIT. This can avoid infinite NOWAIT loops to reorganize heavily accessed tables. - Support native build with MSVC on Windows.
321 lines
15 KiB
HTML
Executable File
321 lines
15 KiB
HTML
Executable File
<!DOCTYPE html PUBLIC "-//W3C//DTD html 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||
<html>
|
||
<head>
|
||
<title>pg_reorg</title>
|
||
<link rel="home" title="pg_reorg " 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_reorg">pg_reorg 1.1.0</h1>
|
||
<div class="navigation">
|
||
<a href="index-ja.html">Top</a> >
|
||
<a href="pg_reorg-ja.html">pg_reorg</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="#seealso">関連項目</a></li>
|
||
</ol>
|
||
</div>
|
||
|
||
<h2 id="name">名前</h2>
|
||
pg_reorg -- PostgreSQLデータベース内のテーブルに対して、参照/更新処理をブロックせずに再編成を行います。
|
||
|
||
<h2 id="synopsis">概要</h2>
|
||
<p>
|
||
pg_reorg [OPTIONS]
|
||
</p>
|
||
|
||
<p>オプション OPTIONS には以下を指定できます。
|
||
詳細は<a href="#options">オプション</a>を参照してください。</p>
|
||
<ul>
|
||
<li>固有オプション<ul>
|
||
<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>-a, --all : 全てのデータベースに対して実行します</li>
|
||
<li>-d, --dbname=DBNAME : 接続するデータベース</li>
|
||
<li>-h, --host=HOSTNAME : データベースサーバホスト、またはソケットディレクトリ</li>
|
||
<li>-p, --port=PORT : データベースサーバのポート</li>
|
||
<li>-U, --username=USERNAME : このユーザとして接続します</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_reorg は、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_reorg test</KBD></PRE>
|
||
<p>testという名前のデータベースのfooという1つのテーブルに対してオンライン VACUUM FULL を行うには、下記のコマンドを実行します。</p>
|
||
<PRE><SAMP>$ </SAMP><KBD>pg_reorg --no-order --table foo -d test</KBD></PRE><p>
|
||
</p>
|
||
|
||
<h2 id="options">オプション</h2>
|
||
<p>pg_reorg では、下記のコマンドライン引数を指定できます。</p>
|
||
<dl>
|
||
|
||
<h3>固有オプション</h3>
|
||
<p>pg_reorg を実行する対象と並び替えの基準を指定するパラメータです。
|
||
何も指定されていない場合は、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>
|
||
</dl>
|
||
|
||
<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 />
|
||
--password</dt>
|
||
<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_reorg の実行に失敗した場合にエラーが表示されます。
|
||
想像されるエラー原因と対処を示します。</p>
|
||
<p>致命的なエラーで終了した場合、手動によるクリーンアップを行う必要があります。
|
||
クリーンアップは、エラーが発生したデータベースに対して、$PGHOME/share/contrib/uninstall_pg_reorg.sql を実行し、その後、$PGHOME/share/contrib/pg_reorg.sql を実行します。</p>
|
||
|
||
<dl>
|
||
<dt>pg_reorg : reorg database "template1" ... skipped</dt>
|
||
<dd>--allオプションを指定した際に、pg_reorg がインストールされていないデータベースに対して表示されます。</dd>
|
||
<dd>pg_reorg スキーマのインストールを行ってください。</dd>
|
||
|
||
<dt>ERROR: pg_reorg is not installed</dt>
|
||
<dd>--dbnameで指定したデータベースにpg_reorg がインストールされていません。</dd>
|
||
<dd>pg_reorg のインストールを行ってください。</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_reorg : query failed: ERROR: column "col" does not exist</dt>
|
||
<dd>--order-by で指定したカラムが対象のテーブルに存在していません。</dd>
|
||
<dd>対象のテーブルに存在するカラムを指定してください。</dd>
|
||
|
||
<dt>ERROR: permission denied for schema reorg</dt>
|
||
<dd>操作を行おうとした対象に権限がありません。</dd>
|
||
<dd>スーパーユーザで操作を行ってください。</dd>
|
||
|
||
<dt>pg_reorg : query failed: ERROR: trigger "z_reorg_trigger" for relation "tbl" already exists</dt>
|
||
<dd>操作を行おうとした対象にpg_reorg が処理のために作成するトリガと同名のものが存在しています。</dd>
|
||
<dd>トリガの改名か削除を行ってください。</dd>
|
||
|
||
<dt>pg_reorg : trigger conflicted for tbl</dt>
|
||
<dd>操作を行おうとした対象にpg_reorg が処理のために作成するトリガより後に実行されるトリガが存在しています。</dd>
|
||
<dd>トリガの改名か削除を行ってください。</dd>
|
||
</dl>
|
||
|
||
<h2 id="restrictions">使用上の注意と制約</h2>
|
||
<p>pg_reorg を使用する際には、以下の制約があります。以下の制約に関する操作を行った場合の動作は保証されません。注意してください。</p>
|
||
|
||
<h3>一時テーブルへの操作</h3>
|
||
<p>pg_reorg では、一時テーブルは操作の対象外です。</p>
|
||
|
||
<h3>GiSTインデックスの使用</h3>
|
||
<p>インデックス種別がGiSTとなっているインデックスがクラスタインデックスとなっている
|
||
テーブルはpg_reorg コマンドを使用して操作を行うことはできません。
|
||
これは、GiSTインデックスのソート順序は一意ではないため、ORDER BYによる
|
||
ソートが行えないためです。</p>
|
||
|
||
<h3>DDLコマンドの発行</h3>
|
||
<p>
|
||
pg_reorg の実行中には、VACUUM と ANALYZE <STRONG>以外</STRONG> のDDL操作は行わないでください。
|
||
多くの場合、pg_reorg は失敗しロールバックされます。
|
||
しかし、以下の操作ではデータが破損するため、非常に危険です。
|
||
</p>
|
||
|
||
<dl>
|
||
<dt>TRUNCATE</dt>
|
||
<dd>削除した行が pg_reorg 実行後には復元しています。操作結果が消失します。</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_reorg 実行後にrelfilenodeとの不整合が起こるため、対象のテーブルに対する参照/更新操作時にエラーが発生します。</dd>
|
||
</dl>
|
||
|
||
<h2 id="details">詳細</h2>
|
||
<p>pg_reorg は reorg スキーマに作業用テーブルを作成し、そこでデータの並び替えを行います。
|
||
最後にシステムカタログを直接書き換えることで、元のテーブルと名前を交換しています。</p>
|
||
|
||
<h2 id="install">インストール方法</h2>
|
||
<p>pg_reorg のインストールは、標準のcontribモジュールと同様です。</p>
|
||
<h3>ビルド</h3>
|
||
<p>pg_reorg のフォルダを$PGHOME/contrib/に配置し、make, make installを行ってください。</p>
|
||
<h3>データベースへの登録</h3>
|
||
<p>PostgreSQLを起動し、対象のデータベースに対して $PGHOME/share/contrib にある pg_reorg.sql を実行し、インストールを行ってください。</p>
|
||
|
||
<h2 id="requirement">動作環境</h2>
|
||
<dl>
|
||
<dt>PostgreSQLバージョン</dt>
|
||
<dd>PostgreSQL 8.3, 8.4, 9.0</dd>
|
||
<dt>OS</dt>
|
||
<dd>RHEL 5.2, Windows XP SP3</dd>
|
||
<dt>ディスク容量</dt>
|
||
<dd>処理対象のテーブル、インデックスサイズの2倍以上のディスク空き容量 (対象が1GBならば、さらに追加で2GB)</dd>
|
||
</dl>
|
||
|
||
<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> >
|
||
<a href="pg_reorg-ja.html">pg_reorg</a>
|
||
<div>
|
||
<p class="footer">Copyright (c) 2008-2010, NIPPON TELEGRAPH AND TELEPHONE CORPORATION</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>
|