テーブル空間PostgreSQLのテーブル空間により、データベース管理者はデータベースオブジェクトを表すファイルを格納できるファイルシステム上の場所を定義することができます。テーブル空間を一度作成すると、データベースオブジェクトを作成する時に名前により参照することができます。テーブル空間を使用することで、管理者はPostgreSQLインストレーションのディスクレイアウトを制御することができます。これは、少なくとも2つの点で有用です。1つは、クラスタを初期化したパーティションもしくはボリュームの容量が不足し、拡張を行うことができない場合、システムを再構成するまで、別のパーティションにテーブル空間を作成して、このテーブル空間を使用することができます。1つは、テーブル空間により、管理者はデータベースオブジェクトの使用パターンに基づいてデータ格納場所を調整することができることです。非常によく使用されるインデックスを、例えば、高価なソリッドステートディスクなどの高速・高可用性ディスクに格納することができます。同時に、めったに使用されない保存用のデータや性能が求められていない保存用のデータを格納するテーブルを低価格・低速ディスクシステムに格納することもできます。主PostgreSQLデータディレクトリの外に位置していたとしても、テーブル空間はデータベースクラスタの不可欠な部分であり、データファイルの自律的な集合として扱うことはできません。それらは主データディレクトリに含まれるメタデータに依存しますので、異なるデータベースクラスタに所属させたり、個別にバックアップしたりすることはできません。同様に、テーブル空間を失えば(ファイル削除、ディスクの破損など)、データベースクラスタは読み取れなくなったり、開始できなくなったりするかもしれません。テーブル空間をRAMディスクのような一時ファイルシステムに置くことは、クラスタ全体の信頼性を危険にさらします。TABLESPACEコマンドを使用してください。'/ssd1/postgresql/data';この場所は、既存かつ空のディレクトリでなければならず、また、PostgreSQLオペレーティングシステムユーザが所有していなければなりません。その後に、テーブル空間内に作成されるオブジェクトはすべてこのディレクトリ以下のファイルに格納されます。ファイルシステム内の個々のファイルの場所を制御することができませんので、1つの論理ファイルシステムに複数のテーブル空間を作成することは意味がありません。PostgreSQLにはこうした制限はありません。実際、システムのファイルシステムの境を直接意識しません。使用することを宣言したディレクトリにファイルを格納します。テーブル空間自体の生成はデータベーススーパーユーザが行う必要があります。その後に、データベース一般ユーザにそのテーブル空間を使用させることができます。これを行うには、ユーザにテーブル空間に対するCREATE権限を与えてください。テーブル、インデックス、およびデータベース全体は特定のテーブル空間に割り当て可能です。これを行うには、指定テーブル空間にCREATE権限を持つユーザが関連するコマンドにテーブル空間をパラメータとして渡す必要があります。以下はspace1テーブル空間にあるテーブルを作成しています。space1;他の方法として、以下のようにdefault_tablespaceパラメータの使用があります。TABLESPACE句として適用されます。temp_tablespacesというパラメータも存在します。これは、一時テーブルとそのインデックス、大規模データ集合のソートなどを目的に使用される一時ファイルの場所を決定するものです。これは、テーブル空間名を1つだけ指定するものではなく、テーブル空間名のリストを取ることができます。このため、一時的なオブジェクトに関連する負荷を、複数のテーブル空間にわたって分散することができます。一時的なオブジェクトを作成する度に、このリストから無作為に要素が選択されます。データベースに関連付けされたテーブル空間は、そのデータベースのシステムカタログを格納するために使用されます。TABLESPACE句を付けずに、または、(適切な)default_tablespaceやtemp_tablespacesで指定された選択肢がなければ、データベース内に作成されたテーブルやインデックスのデフォルトのテーブル空間としても使用されます。テーブル空間の指定なしで作成されたデータベースは、コピー元のテンプレートデータベースのテーブル空間と同じものを使用します。データベースクラスタが初期化される時に2つのテーブル空間が自動的に作成されます。pg_globalテーブル空間は共有システムカタログ用に使用されます。DATABASEのTABLESPACE句で変更されない限り、このテーブル空間が同様に他のデータベースに対するデフォルトのテーブル空間になります)。テーブル空間は、一度作成すると、要求しているユーザが十分な権限を持っていればすべてのデータベースから使用することができます。これは、テーブル空間を使用するすべてのデータベースのすべてのオブジェクトが削除されるまで、そのテーブル空間を削除できないことを意味します。TABLESPACEコマンドを使用してください。既存のテーブル空間群を求めるには、以下の例のようにpg_tablespaceを確認してください。pg_tablespace;また、psqlプログラムの\dbメタコマンドも既存のテーブル空間を列挙する際に役に立ちます。テーブル空間の実装を単純化するために、PostgreSQLはシンボリックリンクを使用します。これは、テーブル空間はシンボリックリンクをサポートするシステムでのみ使用することができるということを意味します。$PGDATA/pg_tblspcディレクトリには、そのクラスタで定義された非組み込みテーブル空間1つひとつを指し示すシンボリックリンクがあります。推奨はしませんが、こうしたリンクを手作業で再定義してテーブル空間のレイアウトを調整することができます。これをサーバが実行している時に行わないでください。9.1およびそれ以前の場合、pg_tablespaceカタログを新規の場所に更新してください。(これを行わないと、pg_dumpは古いテーブル空間の場所に出力し続けます。