diff --git a/doc/.gitignore b/doc/.gitignore new file mode 100644 index 0000000..9b61c8c --- /dev/null +++ b/doc/.gitignore @@ -0,0 +1 @@ +/*.html diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 0000000..4379fb2 --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,16 @@ +RSTCSS = $(shell python -c 'import docutils.writers.html4css1 as m; print m.Writer.default_stylesheet_path') +RSTOPTS = --stylesheet-path=style.css,$(RSTCSS) --initial-header-level=2 + +HTML = $(patsubst %.rst,%.html,$(wildcard *.rst)) + +.PHONY: clean + +all : html + +html : $(HTML) + +%.html: %.rst style.css + rst2html $(RSTOPTS) $< $@ + +clean: + rm -f $(HTML) diff --git a/doc/index-ja.html b/doc/index-ja.html deleted file mode 100755 index 805a4ad..0000000 --- a/doc/index-ja.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - - - pg_repack: Project Home Page - - - -
-
-

pg_repack ホームページへようこそ

-
-
- -

このプロジェクトでは pg_repackpg_batch の2つのツールを頒布しています。

- -

-pg_repack は PostgreSQL のテーブルを再編成するシェルコマンドです。 -共有ロックや排他ロックを取得しないため、再編成中であっても行の参照や更新を行うことができます。 -このモジュールは CLUSTER や VACUUM FULL コマンドのより良い代替になります。 -

- -

-pg_batch は PostgreSQL のためのSQLジョブ実行プログラムです。 -ジョブ一覧生成するスクリプトを SQL として外部から与え、その出力 SQL をジョブとしてシリアルまたはパラレルに実行します。 -VACUUM を行うスクリプトが付属しており、"より良い vacuumdb" として利用できます。 -

- -

この pg_repack プロジェクトは PostgreSQL コミュニティによる pgFoundry の中のプロジェクトです。

- -
-Here is an English page. -
-
- -

ドキュメント

- - - -

実行時間

-

-pg_repack とclusterdb の比較に示します。 -断片化のないソートされた状態 (not fragmented) では clusterdb のほうが高速ですが、完全に断片化した状態 (fully fragmented) では pg_repack が大幅に高速です。 -一般的に、再編成は断片化が進行した状態で実施されることを考えると、pg_repack は clusterdb よりも実行時間が短いと言えます。 -

- -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
測定環境
大項目小項目環境
ハードウェアCPU2 × Xeon 5160 3.00GHz (Dual core)
メモリ2GB
ストレージUltra320 SCSI, 15000rpm (220GB)
ソフトウェアOSRHEL 5.2 (64bit) 2.6.18-92.el5
DBPostgreSQL 8.3.3
pg_repack1.0.0
clusterdbclusterdb (PostgreSQL) 8.3.3
データスキーマ
CREATE TABLE tbl (
- id bigserial PRIMARY KEY,
- seqkey timestamp NOT NULL,
- rndkey timestamp NOT NULL,
- filler char(75) NOT NULL
-);
-CREATE INDEX idx_seq ON tbl (seqkey);
-CREATE INDEX idx_rnd ON tbl (rndkey);
件数1650万件 (約2GB)
- -
- - -
- - - - - - diff --git a/doc/index.html b/doc/index.html deleted file mode 100755 index 12f8f3f..0000000 --- a/doc/index.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - - - - pg_repack: Project Home Page - - - -
-
-

Welcome to the pg_repack Project Home Page

-
-
- -

-This project provides two tools for PostgreSQL; pg_repack and pg_batch. -

- -

-pg_repack can re-organize tables on a postgres database without any locks so that you can retrieve or update rows in tables being reorganized. -The module is developed to be a better alternative of CLUSTER and VACUUM FULL. -

- -

-pg_batch is a SQL job executor program for PostgreSQL. -It generates job list from an external SQL script file, and execute the jobs in serial or parallel. -It can be used as "a better vacuumdb" with the attached script to run VACUUM. -

- -

-The pg_repack project is a PostgreSQL Community project that is a part of the pgFoundry. -

-

-The pgFoundry page for the project is at http://pgfoundry.org/projects/repack, -where you can find downloads, documentation, bug reports, mailing lists, and a whole lot more. -

-
-日本語のページはこちら。 -
-
- -

Documentation

- - - -

Execution time

-

-Here is a comparison between pg_repack and clusterdb. -Clusterdb is faster on not fragmented conditions, but pg_repack is faster on fully fragmented conditions. -Since reorganization is needed only if tables are fragmented, pg_repack should be faster than clusterdb. -

- -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Configuration
CategoryItemDetails
HardwareCPU2 * Xeon 5160 3.00GHz (Dual core)
Memory2GB
StorageUltra320 SCSI, 15000rpm (220GB)
SoftwareOSRHEL 5.2 (64bit) 2.6.18-92.el5
DBPostgreSQL 8.3.3
pg_repack1.0.0
clusterdbclusterdb (PostgreSQL) 8.3.3
DataScheme
CREATE TABLE tbl (
- id bigserial PRIMARY KEY,
- seqkey timestamp NOT NULL,
- rndkey timestamp NOT NULL,
- filler char(75) NOT NULL
-);
-CREATE INDEX idx_seq ON tbl (seqkey);
-CREATE INDEX idx_rnd ON tbl (rndkey);
Rows16.5 M rows (2GB)
- -
- -
- - - - - - diff --git a/doc/pg_repack-ja.html b/doc/pg_repack-ja.html deleted file mode 100755 index ef0a896..0000000 --- a/doc/pg_repack-ja.html +++ /dev/null @@ -1,354 +0,0 @@ - - - -pg_repack - - - - - - -

pg_repack 1.1.7

- -
- -
-
    -
  1. 名前
  2. -
  3. 概要
  4. -
  5. 説明
  6. -
  7. 使用例
  8. -
  9. オプション
  10. -
  11. 環境変数
  12. -
  13. 使用上の注意と制約
  14. -
  15. 詳細
  16. -
  17. インストール方法
  18. -
  19. 動作環境
  20. -
  21. 更新履歴
  22. -
  23. 関連項目
  24. -
-
- -

名前

-pg_repack -- PostgreSQLデータベース内のテーブルに対して、参照/更新処理をブロックせずに再編成を行います。 - -

概要

-

-pg_repack [OPTIONS] -

- -

オプション OPTIONS には以下を指定できます。 -詳細はオプションを参照してください。

- - -

説明

-

pg_repack は、PostgreSQLデータベース内のテーブルを再編成(行の並び替え)するユーティリティです。 -clusterdb と異なり、参照/更新処理をブロックしません。 -再編成の方式として、以下のいずれか1つを選択できます。

- -

このユーティリティを使用するためには、以下のことに注意をしてください。

- - -

-

testというデータベースをオンライン CLUSTER するには、下記のコマンドを実行します。

-
$ pg_repack test
-

testという名前のデータベースのfooという1つのテーブルに対してオンライン VACUUM FULL を行うには、下記のコマンドを実行します。

-
$ pg_repack --no-order --table foo -d test

-

- -

オプション

-

pg_repack では、下記のコマンドライン引数を指定できます。

- -

固有オプション

-

pg_repack を実行する対象と並び替えの基準を指定するパラメータです。 -何も指定されていない場合は、cluster index順にオンライン CLUSTER を行います。 -この2つを同時に指定することはできません。 -

- -
-
-n
--no-order
-
オンライン VACUUM FULL の処理を行います。
- -
-o columns [,...]
---order-by columns [,...]
-
指定したカラムをキーにオンライン CLUSTER を行います。
- -
--t table
---table=table -
-
オンライン CLUSTER 、または、オンライン VACUUM FULL を行うテーブルを指定します。 -このオプションが指定されていない場合は、対象となったデータベースに存在する全ての対象テーブルに対して処理を行います。 -
- -
--T seconds
---wait-timeout=seconds -
-
-再編成完了直前に一瞬だけ排他ロックを取得しますが、この排他ロックが取得できるまで待機する秒数を指定します。 -この秒数が経過してもロックが取得できない場合には、対象のテーブルにアクセスしている他の全てのクエリを取り消します。 -また、サーバのバージョンが 8.4 またはそれ以降の場合には、指定した秒数の2倍経過してもロックを取得できない場合には、強制的に切断します。 -デフォルトは60秒です。 -
- -
-Z
--no-analyze
-
再編成後に ANALYZE を行いません。 -このオプションが指定されていない場合は、再編成後に ANALYZE します。
- -
- -

接続オプション

-

-PostgreSQLに接続するためのパラメータです。 ---allと--dbnameまたは--tableを同時に指定することはできません。 -

- -
-
-a
--all
-
対象となる全てのデータベースに対してオンライン CLUSTER、または、オンラインVACUUM FULLを行います。
- -
--d DBNAME
---dbname=DBNAME -
-
オンライン CLUSTER、または、オンライン VACUUM FULL を行うデータベース名を指定します。 -データベース名が指定されておらず、-a(または--all)も指定されていない場合、 -データベース名はPGDATABASE環境変数から読み取られます。 -この変数も設定されていない場合は、接続時に指定したユーザ名が使用されます。
- -
-h HOSTNAME
---host=HOSTNAME
-
サーバが稼働しているマシンのホスト名を指定します。ホスト名がスラッシュから始まる場合、Unixドメインソケット用のディレクトリとして使用されます。
- -
-p PORT
---port=PORT
-
サーバが接続を監視するTCPポートもしくはUnixドメインソケットファイルの拡張子を指定します。
- -
-U USERNAME
---username=USERNAME
-
接続するユーザ名を指定します。
- -
-w
---no-password
-
-パスワードの入力を促しません。 -サーバがパスワード認証を必要とし、かつ、.pgpassファイルなどの他の方法が利用できない場合、接続試行は失敗します。 -バッチジョブやパスワードを入力するユーザが存在しない場合にこのオプションは有用かもしれません。 -
- -
-W
---password
-
データベースに接続する前に、強制的にパスワード入力を促します。
-
-サーバがパスワード認証を要求する場合 自動的にパスワード入力を促しますので、これが重要になることはありません。 -しかし、サーバにパスワードが必要かどうかを判断するための接続試行を無駄に行います。 -こうした余計な接続試行を防ぐために -W の入力が有意となる場合もあります。 -
-
- -

一般オプション

-
-
-e
--echo
-
サーバに送信するSQLを表示します。
-
-E
--elevel
-
ログ出力レベルを設定します。 -DEBUG, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, PANIC から選択します。 -デフォルトは INFO です。
-
--help
-
使用方法について表示します。
-
--version
-
バージョン情報を表示します。
-
- -

環境変数

-
-
- PGDATABASE
- PGHOST
- PGPORT
- PGUSER -
-
デフォルトの接続パラメータです。
-
- -

-また、このユーティリティは、他のほとんどの PostgreSQL ユーティリティと同様、libpq でサポートされる環境変数を使用します。詳細については、環境変数の項目を参照してください。 -

- -

トラブルシューティング

-

pg_repack の実行に失敗した場合にエラーが表示されます。 -想像されるエラー原因と対処を示します。

-

致命的なエラーで終了した場合、手動によるクリーンアップを行う必要があります。 -クリーンアップは、エラーが発生したデータベースに対して、$PGHOME/share/contrib/uninstall_pg_repack.sql を実行し、その後、$PGHOME/share/contrib/pg_repack.sql を実行します。

- -
-
pg_repack : repack database "template1" ... skipped
-
--allオプションを指定した際に、pg_repack がインストールされていないデータベースに対して表示されます。
-
pg_repack スキーマのインストールを行ってください。
- -
ERROR: pg_repack is not installed
-
--dbnameで指定したデータベースにpg_repack がインストールされていません。
-
pg_repack のインストールを行ってください。
- -
ERROR: relation "table" has no primary key
-
指定したテーブルにPRIMARY KEYが存在していません。
-
対象のテーブルにPRIMARY KEYの作成を行ってください。(ALTER TABLE ADD PRIMARY KEY)
- -
ERROR: relation "table" has no cluster key
-
指定したテーブルに CLUSTER KEYが存在していません。
-
対象のテーブルに CLUSTER KEYの作成を行ってください。(ALTER TABLE CLUSTER)
- -
pg_repack : query failed: ERROR: column "col" does not exist
-
--order-by で指定したカラムが対象のテーブルに存在していません。
-
対象のテーブルに存在するカラムを指定してください。
- -
ERROR: permission denied for schema repack
-
操作を行おうとした対象に権限がありません。
-
スーパーユーザで操作を行ってください。
- -
pg_repack : query failed: ERROR: trigger "z_repack_trigger" for relation "tbl" already exists
-
操作を行おうとした対象にpg_repack が処理のために作成するトリガと同名のものが存在しています。
-
トリガの改名か削除を行ってください。
- -
pg_repack : trigger conflicted for tbl
-
操作を行おうとした対象にpg_repack が処理のために作成するトリガより後に実行されるトリガが存在しています。
-
トリガの改名か削除を行ってください。
-
- -

使用上の注意と制約

-

pg_repack を使用する際には、以下の制約があります。以下の制約に関する操作を行った場合の動作は保証されません。注意してください。

- -

一時テーブルへの操作

-

pg_repack では、一時テーブルは操作の対象外です。

- -

GiSTインデックスの使用

-

インデックス種別がGiSTとなっているインデックスがクラスタインデックスとなっている -テーブルはpg_repack コマンドを使用して操作を行うことはできません。 -これは、GiSTインデックスのソート順序は一意ではないため、ORDER BYによる -ソートが行えないためです。

- -

DDLコマンドの発行

-

-pg_repack の実行中には、VACUUM と ANALYZE 以外 のDDL操作は行わないでください。 -多くの場合、pg_repack は失敗しロールバックされます。 -しかし、以下の操作ではデータが破損するため、非常に危険です。 -

- -
-
TRUNCATE
-
削除した行が pg_repack 実行後には復元しています。操作結果が消失します。
- -
CREATE INDEX
-
スワップされない索引が残る可能性があります。データの不整合が生じます。
- -
ALTER TABLE ... ADD COLUMN
-
追加された値が全てNULLに置換されてしまう可能性があります。データが消失します。
- -
ALTER TABLE ... ALTER COLUMN TYPE
-
実行するとスキーマで定義された型と実際の格納状態に齟齬をきたします。データの不整合が生じます。
- -
ALTER TABLE ... SET TABLESPACE
-
pg_repack 実行後にrelfilenodeとの不整合が起こるため、対象のテーブルに対する参照/更新操作時にエラーが発生します。
-
- -

詳細

-

pg_repack は repack スキーマに作業用テーブルを作成し、そこでデータの並び替えを行います。 -最後にシステムカタログを直接書き換えることで、元のテーブルと名前を交換しています。

- -

インストール方法

-

-UNIX や Linux では、make を実行すると自動的に pgxs を使ってビルドできます。 -前もって PostgreSQL 開発用パッケージ (postgresql-devel 等) をインストールし、pg_config にパスを通してください。 -

-
$ cd pg_repack
-$ make
-$ su
-$ make install
-

-Windows では Microsoft Visual C++ 2010 でビルドできます。 -msvc フォルダ内にプロジェクトファイルがあります。 -

- -

その後、データベースに関数を登録します。

-
$ pg_ctl start
-$ psql -f $PGSHARE/contrib/pg_repack.sql -d your_database
- -

(注意: CREATE EXTENSION はまだサポートしていません。)

- -

動作環境

-
-
PostgreSQLバージョン
-
PostgreSQL 8.2, 8.3, 8.4, 9.0, 9.1, 9.2
-
OS
-
RHEL 5.2, Windows XP SP3
-
ディスク容量
-
処理対象のテーブル、インデックスサイズの2倍以上のディスク空き容量 (対象が1GBならば、さらに追加で2GB)
-
- -

更新履歴

- - -

関連項目

-clusterdb, -vacuumdb - -
- - - - - - - diff --git a/doc/pg_repack.html b/doc/pg_repack.html deleted file mode 100755 index 86e187e..0000000 --- a/doc/pg_repack.html +++ /dev/null @@ -1,345 +0,0 @@ - - - -pg_repack - - - - - - -

pg_repack 1.1.7

- -
- -
-
    -
  1. Name
  2. -
  3. Synopsis
  4. -
  5. Description
  6. -
  7. Examples
  8. -
  9. Options
  10. -
  11. Environment
  12. -
  13. Restrictions
  14. -
  15. Details
  16. -
  17. Installations
  18. -
  19. Requirements
  20. -
  21. Releases
  22. -
  23. See Also
  24. -
-
- -

Name

-pg_repack -- Reorganize tables in PostgreSQL databases without any locks. - -

Synopsis

-

-pg_repack [OPTIONS] -

- -

The following options can be specified in OPTIONS. -See also "Options" for details.

- - -

Description

-

pg_repack is an utility program to reorganize tables in PostgreSQL databases. -Unlike clusterdb, it doesn't block any selections and updates during reorganization. -You can choose one of the following methods to reorganize.

- -

NOTICE:

- - -

Examples

-

Execute the following command to perform an online CLUSTER of all tables in test database.

-
$ pg_repack test
-

Execute the following command to perform an online VACUUM FULL to foo table in test database.

-
$ pg_repack --no-order --table foo -d test

-

- -

Options

-

pg_repack has the following command line options:

- -

Reorg Options

-

Options to order rows. -If not specified, pg_repack performs an online CLUSTER using cluster indexes. -Only one option can be specified. - -You may also specify target tables or databases. -

- -
-
-n
--no-order
-
Do online VACUUM FULL.
- -
-o columns [,...]
---order-by=columns [,...]
-
Do online CLUSTER ordered by specified columns.
- -
--t table
---table=table -
-
Reorganize table only. If you don't specify this option, all tables in specified databases are reorganized.
- -
--T seconds
---wait-timeout=seconds -
-
-pg_repack needs to take an exclusive lock at the end of the reorganization. -This setting controls how long it wait for acquiring the lock in seconds. -If the lock cannot be taken even after the duration, pg_repack forces to cancel conflicted queries. -Also, if the server version is 8.4 or newer, pg_repack forces to disconnect conflicted backends after twice time passed. -The default is 60 seconds. -
- -
-Z
--no-analyze
-
Disable ANALYZE after the reorganization. -If not specified, run ANALYZE after the reorganization.
- -
- -

Connection Options

-

-Options to connect to servers. -You cannot use --all and --dbname or --table together. -

- -
-
-a
--all
-
Reorganize all databases.
- -
--d dbname
---dbname dbname -
-
Specifies the name of the database to be reorganized. If this is not specified and -a (or --all) is not used, the database name is read from the environment variable PGDATABASE. If that is not set, the user name specified for the connection is used.
- -
-h host
---host host
-
Specifies the host name of the machine on which the server is running. If the value begins with a slash, it is used as the directory for the Unix domain socket.
- -
-p port
---port port
-
Specifies the TCP port or local Unix domain socket file extension on which the server is listening for connections.
- -
-U username
---username username
-
User name to connect as.
- -
-w
---no-password
-
-Never issue a password prompt. -If the server requires password authentication and a password is not available by other means such as a .pgpass file, the connection attempt will fail. -This option can be useful in batch jobs and scripts where no user is present to enter a password. -
- -
-W
---password
-
Force the program to prompt for a password before connecting to a database.
-
This option is never essential, since the program will automatically prompt for a password if the server demands password authentication. However, pg_repack will waste a connection attempt finding out that the server wants a password. In some cases it is worth typing -W to avoid the extra connection attempt.
-
- -

Generic Options

-
-
-e
--echo
-
Echo commands sent to server.
-
-E
--elevel
-
Choose the output message level from DEBUG, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, and PANIC. -The default is INFO.
-
--help
-
Show usage of the program.
-
--version
-
Show the version number of the program.
-
- -

Environment

-
-
- PGDATABASE
- PGHOST
- PGPORT
- PGUSER -
-
Default connection parameters
-
-

This utility, like most other PostgreSQL utilities, also uses the environment variables supported by libpq (see Environment Variables).

- -

Diagnostics

-

Error messages are reported when pg_repack fails. -The following list shows the cause of errors.

-

You need to cleanup by hand after fatal errors. -To cleanup, execute $PGHOME/share/contrib/uninstall_pg_repack.sql to the database where the error occured and then execute $PGHOME/share/contrib/pg_repack.sql. (Do uninstall and reinstall.)

- -
-
pg_repack : repack database "template1" ... skipped
-
pg_repack is not installed in the database when --all option is specified.
-
Do register pg_repack to the database.
- -
ERROR: pg_repack is not installed
-
pg_repack is not installed in the database specified by --dbname.
-
Do register pg_repack to the database.
- -
ERROR: relation "table" has no primary key
-
The target table doesn't have PRIMARY KEY.
-
Define PRIMARY KEY to the table. (ALTER TABLE ADD PRIMARY KEY)
- -
ERROR: relation "table" has no cluster key
-
The target table doesn't have CLUSTER KEY.
-
Define CLUSTER KEY to the table. (ALTER TABLE CLUSTER)
- -
pg_repack : query failed: ERROR: column "col" does not exist
-
The target table doesn't have columns specified by --order-by option.
-
Specify existing columns.
- -
ERROR: permission denied for schema repack
-
Permission error.
-
pg_repack must be executed by superusers.
- -
pg_repack : query failed: ERROR: trigger "z_repack_trigger" for relation "tbl" already exists
-
The target table already has a trigger named "z_repack_trigger".
-
Delete or rename the trigger.
- -
pg_repack : trigger conflicted for tbl
-
The target table already has a trigger which follows by "z_repack_trigger" in alphabetical order.
-
Delete or rename the trigger.
-
- -

Restrictions

-

pg_repack has the following restrictions. -Be careful to avoid data corruptions.

- -

Temp tables

-

pg_repack cannot reorganize temp tables.

- -

GiST indexes

-

pg_repack cannot reorganize tables using GiST indexes.

- -

DDL commands

-

You cannot do DDL commands except VACUUM and ANALYZE during pg_repack. -In many cases pg_repack will fail and rollback collectly, but there are some cases which may result in data-corruption .

- -
-
TRUNCATE
-
TRUNCATE is lost. Deleted rows still exist after pg_repack.
- -
CREATE INDEX
-
It causes index corruptions.
- -
ALTER TABLE ... ADD COLUMN
-
It causes lost of data. Newly added columns are initialized with NULLs.
- -
ALTER TABLE ... ALTER COLUMN TYPE
-
It causes data corruptions.
- -
ALTER TABLE ... SET TABLESPACE
-
It causes data corruptions by wrong relfilenode.
-
- -

Details

-

pg_repack creates a work table in the repack schema and sorts the rows in this table. -Then, it updates the system catalogs directly to swap the work table and the original one.

- -

Installations

-

-pg_repack can be built with "make" on UNIX or Linux. -pgxs build framework is used automatically. -Before building, you might need to install postgres packages for developer (postgresql-devel, etc.) -and add pg_config to your $PATH. -

-
$ cd pg_repack
-$ make
-$ su
-$ make install
-

-You can also use Microsoft Visual C++ 2010 to build the program on Windows. -There are project files in the msvc folder. -

- -

Start PostgreSQL and execute the script to register functions to your database.

-
$ pg_ctl start
-$ psql -f $PGSHARE/contrib/pg_repack.sql -d your_database
- -

(NOTE: CREATE EXTENSION is not supported yet.)

- -

Requirements

-
-
PostgreSQL versions
-
PostgreSQL 8.2, 8.3, 8.4, 9.0, 9.1, 9.2
-
OS
RHEL 5.2, Windows XP SP3
-
Disks
Requires free disk space twice as large as the target -table(s) and indexes. For example, if the total size of the tables and -indexes to be reorganized is 1GB, an additional 2GB of disk space is -required.
-
- -

Releases

- - -

See Also

-clusterdb, -vacuumdb - -
- - -
- -
- - - - - diff --git a/doc/pg_repack.rst b/doc/pg_repack.rst new file mode 100644 index 0000000..6630aa3 --- /dev/null +++ b/doc/pg_repack.rst @@ -0,0 +1,355 @@ +pg_repack -- Reorganize tables in PostgreSQL databases without any locks +======================================================================== + +.. contents:: + :depth: 1 + :backlinks: none + +Synopsis +-------- + +:: + + pg_repack [OPTION]... [DBNAME] + +The following options can be specified in ``OPTIONS``. See also Options_ for +details. + +Options: + -a, --all repack all databases + -n, --no-order do vacuum full instead of cluster + -o, --order-by=COLUMNS order by columns instead of cluster keys + -t, --table=TABLE repack specific table only + -T, --wait-timeout=SECS timeout to cancel other backends on conflict + -Z, --no-analyze don't analyze at end + +Connection options: + -d, --dbname=DBNAME database to connect + -h, --host=HOSTNAME database server host or socket directory + -p, --port=PORT database server port + -U, --username=USERNAME user name to connect as + -w, --no-password never prompt for password + -W, --password force password prompt + +Generic options: + -e, --echo echo queries + -E, --elevel=LEVEL set output message level + --help show this help, then exit + --version output version information, then exit + + +Description +----------- + +pg_repack is an utility program to reorganize tables in PostgreSQL databases. +Unlike clusterdb_, it doesn't block any selections and updates during +reorganization. + +pg_repack is a fork of the previous pg_reorg_ project. It was founded to +gather the bug fixes and new development ideas that the slow pace of +development of pg_reorg was struggling to satisfy. + +You can choose one of the following methods to reorganize: + +* Online CLUSTER (ordered by cluster index) +* Ordered by specified columns +* Online VACUUM FULL (packing rows only) + +NOTICE: + +* Only superusers can use the utility. +* Target table must have PRIMARY KEY. + +.. _clusterdb: http://www.postgresql.org/docs/current/static/app-clusterdb.html +.. _pg_reorg: http://reorg.projects.pgfoundry.org/ + + +Examples +-------- + +Execute the following command to perform an online CLUSTER of all tables in +test database:: + + $ pg_repack test + +Execute the following command to perform an online VACUUM FULL to foo table in +test database:: + + $ pg_repack --no-order --table foo -d test + + +Options +------- + +pg_repack has the following command line options: + +Reorg Options +^^^^^^^^^^^^^ + +Options to order rows. If not specified, pg_repack performs an online CLUSTER +using cluster indexes. Only one option can be specified. You may also specify +target tables or databases. + +``-n``, ``--no-order`` + Do online VACUUM FULL. + +``-o COLUMNS [,...]``, ``--order-by=COLUMNS [,...]`` + Do online CLUSTER ordered by specified columns. + +``-t TABLE``, ``--table=TABLE`` + Reorganize table only. If you don't specify this option, all tables in + specified databases are reorganized. + +``-T SECS``, ``--wait-timeout=SECS`` + pg_repack needs to take an exclusive lock at the end of the + reorganization. This setting controls how long it wait for acquiring the + lock in seconds. If the lock cannot be taken even after the duration, + pg_repack forces to cancel conflicted queries. Also, if the server version + is 8.4 or newer, pg_repack forces to disconnect conflicted backends after + twice time passed. The default is 60 seconds. + +``-Z``, ``--no-analyze`` + Disable ANALYZE after the reorganization. If not specified, run ANALYZE + after the reorganization. + +Connection Options +^^^^^^^^^^^^^^^^^^ + +Options to connect to servers. You cannot use ``--all`` and ``--dbname`` or +``--table`` together. + +``-a``, ``--all`` + Reorganize all databases. + +``-d DBNAME``, ``--dbname=DBNAME`` + Specifies the name of the database to be reorganized. If this is not + specified and ``-a`` (or ``--all``) is not used, the database name is read + from the environment variable PGDATABASE. If that is not set, the user + name specified for the connection is used. + +``-h HOSTNAME``, ``--host=HOSTNAME`` + Specifies the host name of the machine on which the server is running. If + the value begins with a slash, it is used as the directory for the Unix + domain socket. + +``-p PORT``, ``--port=PORT`` + Specifies the TCP port or local Unix domain socket file extension on which + the server is listening for connections. + +``-U USERNAME``, ``--username=USERNAME`` + User name to connect as. + +``-w``, ``--no-password`` + Never issue a password prompt. If the server requires password + authentication and a password is not available by other means such as a + .pgpass file, the connection attempt will fail. This option can be useful + in batch jobs and scripts where no user is present to enter a password. + +``-W``, ``--password`` + Force the program to prompt for a password before connecting to a + database. + + This option is never essential, since the program will automatically + prompt for a password if the server demands password authentication. + However, pg_repack will waste a connection attempt finding out that the + server wants a password. In some cases it is worth typing ``-W`` to avoid + the extra connection attempt. + + +Generic Options +^^^^^^^^^^^^^^^ + +``-e``, ``--echo`` + Echo commands sent to server. + +``-E LEVEL``, ``--elevel=LEVEL`` + Choose the output message level from ``DEBUG``, ``INFO``, ``NOTICE``, + ``WARNING``, ``ERROR``, ``LOG``, ``FATAL``, and ``PANIC``. The default is + ``INFO``. + +``--help`` + Show usage of the program. + +``--version`` + Show the version number of the program. + + +Environment +----------- + +``PGDATABASE``, ``PGHOST``, ``PGPORT``, ``PGUSER`` + Default connection parameters + + This utility, like most other PostgreSQL utilities, also uses the + environment variables supported by libpq (see `Environment Variables`__). + + .. __: http://www.postgresql.org/docs/current/static/libpq-envars.html + + +Diagnostics +----------- + +Error messages are reported when pg_repack fails. The following list shows the +cause of errors. + +You need to cleanup by hand after fatal errors. To cleanup, execute +``$PGHOME/share/contrib/uninstall_pg_repack.sql`` to the database where the +error occured and then execute ``$PGHOME/share/contrib/pg_repack.sql``. (Do +uninstall and reinstall.) + +pg_repack: repack database "template1" ... skipped + pg_repack is not installed in the database when ``--all`` option is + specified. + + Do register pg_repack to the database. + +ERROR: pg_repack is not installed + pg_repack is not installed in the database specified by ``--dbname``. + + Do register pg_repack to the database. + +ERROR: relation "table" has no primary key + The target table doesn't have PRIMARY KEY. + + Define PRIMARY KEY to the table. (ALTER TABLE ADD PRIMARY KEY) + +ERROR: relation "table" has no cluster key + The target table doesn't have CLUSTER KEY. + + Define CLUSTER KEY to the table. (ALTER TABLE CLUSTER) + +pg_repack: query failed: ERROR: column "col" does not exist + The target table doesn't have columns specified by ``--order-by`` option. + + Specify existing columns. + +ERROR: permission denied for schema repack + Permission error. + + pg_repack must be executed by superusers. + +pg_repack: query failed: ERROR: trigger "z_repack_trigger" for relation "tbl" already exists + The target table already has a trigger named ``z_repack_trigger``. + + Delete or rename the trigger. + +pg_repack: trigger conflicted for tbl + The target table already has a trigger which follows by + ``z_repack_trigger`` in alphabetical order. + + Delete or rename the trigger. + + +Restrictions +------------ + +pg_repack has the following restrictions. Be careful to avoid data +corruptions. + +Temp tables +^^^^^^^^^^^ + +pg_repack cannot reorganize temp tables. + +GiST indexes +^^^^^^^^^^^^ + +pg_repack cannot reorganize tables using GiST indexes. + +DDL commands +^^^^^^^^^^^^ + +You cannot do DDL commands **except** VACUUM and ANALYZE during pg_repack. In many +cases pg_repack will fail and rollback collectly, but there are some cases +which may result in data-corruption . + +TRUNCATE + TRUNCATE is lost. Deleted rows still exist after pg_repack. + +CREATE INDEX + It causes index corruptions. + +ALTER TABLE ... ADD COLUMN + It causes lost of data. Newly added columns are initialized with NULLs. + +ALTER TABLE ... ALTER COLUMN TYPE + It causes data corruptions. + +ALTER TABLE ... SET TABLESPACE + It causes data corruptions by wrong relfilenode. + + +Details +------- + +pg_repack creates a work table in the repack schema and sorts the rows in this +table. Then, it updates the system catalogs directly to swap the work table +and the original one. + + +Installations +------------- + +pg_repack can be built with "make" on UNIX or Linux. pgxs build framework is +used automatically. Before building, you might need to install postgres +packages for developer (postgresql-devel, etc.) and add ``pg_config`` to your +``$PATH``. :: + + $ cd pg_repack + $ make + $ su + $ make install + +You can also use Microsoft Visual C++ 2010 to build the program on Windows. +There are project files in the ``msvc`` folder. + +Start PostgreSQL and execute the script to register functions to your +database:: + + $ pg_ctl start + $ psql -c "CREATE EXTENSION pg_repack" -d your_database + + +Requirements +------------ + +PostgreSQL versions + PostgreSQL 8.2, 8.3, 8.4, 9.0, 9.1, 9.2 + +OS + RHEL 5.2, Windows XP SP3 + +Disks + Requires free disk space twice as large as the target table(s) and + indexes. For example, if the total size of the tables and indexes to be + reorganized is 1GB, an additional 2GB of disk space is required. + + +Releases +-------- + +* pg_repack 1.1.8 + + * Added support for PostgreSQL 9.2. + * Added support for CREATE EXTENSION on PostgreSQL 9.1 and following. + * Give user feedback while waiting for transactions to finish (pg_reorg + issue #5). + * Bugfix: Allow running on newly promoted streaming replication slaves + (pg_reorg issue #1). + * Bugfix: Properly escape column names (pg_reorg issue #6). + * Bugfix: Avoid recreating invalid indexes, or choosing them as key + (pg_reorg issue #9). + +* pg_reorg 1.1.7 (2011-08-07) + + * Bugfix: VIEWs and FUNCTIONs could be corrupted that used a reorganized + table which has a dropped column. + * Supports PostgreSQL 9.1 and 9.2dev. (but EXTENSION is not yet) + + +See Also +-------- + + * `clusterdb `__ + * `vacuumdb `__ + diff --git a/doc/style.css b/doc/style.css index 3990cb5..2d5fe0d 100755 --- a/doc/style.css +++ b/doc/style.css @@ -11,11 +11,6 @@ color: #202020; } -/* give the rule a bit of extra space (above and below), since its being used to divide - sections on some pages (project summary) */ -HR { margin: 5px 0px 5px 0px } - - h2, h3, h4, h5, h6 { color: Black; background: none; @@ -43,28 +38,7 @@ li { line-height: 1.4em; } -table { - background: #f9f9f9; - border: 1px solid #aaa; - border-collapse: collapse; -} - -th, td { - border: 1px solid #aaa; - padding: 0.2em; -} - -thead th { - background: #f2f2f2; - text-align: center; -} - -tbody th { - background: #f2f2f2; - text-align: left; -} - -div.index { +div.contents { float:right; border:thin solid black; background-color: white; @@ -73,13 +47,7 @@ div.index { padding-left: 1em; padding-right: 1em; margin-left: 0.5em; + margin-top: 2.5em !important; } -p.footer { - text-align: right; - font-size: small; -} -span.param { - color: #0000cd; -}