pt-set-tablespace¶
概要¶
指定したテーブルと関連するインデックスのテーブルスペースを一括して変更します。
実行方法¶
pt-set-tablespace [option...] [tablespace]
オプション¶
-h, --host=HOSTNAME
-p, --port=PORT
-U, --username=USERNAME
-d, --dbname=DBNAME
-o, --owner=STRING
-n, --schema=STRING
-t, --table=STRING
-l, --list
--apply
--help
-h
, --host
オプションは、接続するPostgreSQLデータベースのサーバ名またはIPアドレスを指定します。オプションが指定されない場合は、PGHOST環境変数に設定された値が使われます。PGHOST環境変数が設定されていない場合には、デフォルトの値として localhost
が使われます。
-p
, --port
オプションは、接続するPostgreSQLデータベースのポート番号を指定します。オプションが指定されない場合は、PGPORT環境変数に設定された値が使われます。PGPORT環境変数が設定されていない場合には、デフォルトの値として 5432
が使われます。
-U
, --username
オプションは、PostgreSQLデータベースに接続するユーザ名を指定します。オプションが指定されない場合は、PGUSER環境変数に設定された値が使われます。PGUSER環境変数が設定されていない場合には、USER環境変数に設定された値が使われます。
-d
, --dbname
オプションは、接続するデータベース名を指定します。オプションが指定されない場合は、PGDATABASE環境変数に設定された値が使われます。PGDATABASE環境変数が設定されていない場合には、データベースに接続するユーザ名と同じ名前のデータベースに接続します。
-o
, --owner
オプションは、指定した文字列に合致する名前のユーザが所有者となっているテーブルのみを対象とします。スラッシュで挟むことで正規表現を指定することもできます(例: /REGEXP/
)。
-n
, --schema
オプションは、指定した文字列に合致する名前のスキーマにあるテーブルのみを対象とします。スラッシュで挟むことで正規表現を指定することもできます(例: /REGEXP/
)。
-t
, --table
オプションは、指定した文字列に合致する名前のテーブルのみを対象とします。スラッシュで挟むことで正規表現を指定することもできます(例: /REGEXP/
)。
--apply
オプションは、テーブルスペースの変更を実際にデータベースに反映します。
-l
, --list
オプションは、テーブルスペースの情報を表示します。
-o
(または --owner
), -n
(または --schema
), -t
(または --table
) を同時に指定した場合には、すべての条件に合致するテーブルのみが対象となります。
1つ以上のテーブルの移動に失敗した場合には終了コード 1
を返します。すべてのファイルの移動に成功した場合には 0
を返します。
出力項目¶
-l
, --list
オプションで表示される項目は以下の通りです。
OID |
テーブルスペースのオブジェクトID |
OWNER |
テーブルスペースの所有者のユーザ名 |
TABLESPACE |
テーブルスペース名 |
LOCATION |
テーブルスペースの配置されているディレクトリのパス |
USE% |
テーブルスペースの配置されているパーティションのディスク使用率 |
AVAIL |
テーブルスペースの配置されているパーティションの空き容量 |
その他の表示項目は以下の通りです。
Dry-run mode |
発行するALTER TABLE/INDEX文を表示しますが、実際の移動は行いません。 |
Applying ALTER TABLE/INDEX |
ALTER TABLE/INDEX文を実際に実行して、テーブル/インデックスのテーブルスペースを変更します。 |
X tables/indexes moved. Y failed. |
X 個のテーブル/インデックスを移動に成功し、 Y 個の移動に失敗しました。 |
実行例¶
PostgreSQLインスタンスに存在するテーブルスペースの一覧を表示します。 各パーティションの使用領域を取得し、併せて一覧として表示します。
$ pt-set-tablespace --list
+--------+----------+------------+---------------------------+------+-------+
| OID | OWNER | TABLESPACE | LOCATION | USE% | AVAIL |
+--------+----------+------------+---------------------------+------+-------+
| 1663 | postgres | pg_default | | | |
| 1664 | postgres | pg_global | | | |
| 121263 | postgres | hddspc2 | /disk/disk2/pgsql | 85% | 80G |
| 16818 | postgres | ssdspc1 | /disk/disk1/tblspc1 | 67% | 127G |
| 305242 | postgres | ssdspc2 | /disk/disk3/pgsql/ssdspc2 | 98% | 13G |
+--------+----------+------------+---------------------------+------+-------+
$
dbt3
データベースにある orders
テーブル、および orders
テーブルに作成されたインデックスのすべてを、 ssdspc1
テーブルスペースに移動するための ALTER TABLE
文および ALTER INDEX
文を表示します。(実際の移動は行いません)
$ pt-set-tablespace -d dbt3 --table orders ssdspc1
[2015-04-29 17:35:24] INFO: Dry-run mode:
[2015-04-29 17:35:24] INFO: ALTER TABLE "public"."orders" SET TABLESPACE "ssdspc1";
[2015-04-29 17:35:24] INFO: ALTER INDEX "public"."pk_orders" SET TABLESPACE "ssdspc1";
[2015-04-29 17:35:24] INFO: ALTER INDEX "public"."i_o_orderdate" SET TABLESPACE "ssdspc1";
[2015-04-29 17:35:24] INFO: ALTER INDEX "public"."i_o_custkey" SET TABLESPACE "ssdspc1";
$
dbt3
データベースにある orders
テーブル、および orders
テーブルに作成されたインデックスのすべてを、 ssdspc1
テーブルスペースに移動します。
$ pt-set-tablespace -d dbt3 --table orders --apply ssdspc1
[2015-04-29 17:37:06] INFO: Applying ALTER TABLE/INDEX...
[2015-04-29 17:37:08] INFO: 4 tables/indexes moved. 0 failed.
$
dbt3
スキーマ内にあるすべてのテーブル、およびすべてのインデックスを、 ssdspc1
テーブルスペースに移動します。
$ pt-set-tablespace --schema dbt3 --apply ssdspc1
[2015-04-29 17:38:39] INFO: Applying ALTER TABLE/INDEX...
[2015-04-29 17:38:57] INFO: 31 tables/indexes moved. 0 failed.
$