CREATE TABLESPACE — 新しいテーブル空間を定義する
CREATE TABLESPACEtablespace_name
[ OWNER {new_owner
| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ] LOCATION 'directory
' [ WITH (tablespace_option
=value
[, ... ] ) ]
CREATE TABLESPACE
はクラスタ全体で使用できるテーブル空間を新規に登録します。
このテーブル空間名は、データベースクラスタ内の既存のテーブル空間名と異なるものでなければなりません。
スーパーユーザはテーブル空間を使用することで、データベースオブジェクト(テーブルやインデックスなど)が入ったデータファイルを格納できる、ファイルシステム上の別の場所を定義できます。
適切な権限を持つユーザは、CREATE DATABASE
やCREATE TABLE
、CREATE INDEX
、ADD CONSTRAINT
コマンドにtablespace_name
を渡すことで、これらのオブジェクトを指定したテーブル空間に格納することができます。
テーブル空間は、それが定義されているクラスタと独立して使うことはできません。 23.6を参照してください。
tablespace_name
作成するテーブル空間の名前です。
pg_
から始まる名前はシステムのテーブル空間用に予約されているので使用することはできません。
user_name
テーブル空間を所有するユーザの名前です。 省略時はデフォルトでコマンドを実行したユーザとなります。 テーブル空間を作成できるのはスーパーユーザのみですが、テーブル空間の所有権を非スーパーユーザに割り当てることは可能です。
directory
テーブル空間用に使用するディレクトリです。
このディレクトリは存在していなければなりませんし(CREATE TABLESPACE
はディレクトリを作成しません)、空であるべきです。また、PostgreSQLのシステムユーザが所有していなければなりません。
このディレクトリは絶対パス名で指定する必要があります。
tablespace_option
値を設定あるいはリセットするテーブル空間のパラメータです。
現在、利用可能なパラメータはseq_page_cost
、random_page_cost
、effective_io_concurrency
、maintenance_io_concurrency
だけです。
特定のテーブル空間について、その値を設定すると、プランナがそのテーブル空間内のテーブルからページを読み込むコストの通常の推定値やエクゼキュータの先読みの振る舞いについて、通常参照する同じ名前の設定パラメータ(seq_page_cost、random_page_cost、effective_io_concurrency、maintenance_io_concurrencyを参照)よりも優先します。
テーブル空間が、他のI/Oサブシステムより高速あるいは低速なディスク上にある時は、これが有効でしょう。
テーブル空間は、シンボリックリンクをサポートしているシステムでのみサポートされます。
トランザクションブロック内でCREATE TABLESPACE
を実行することはできません。
ファイルシステムの/data/dbs
にテーブル空間dbspace
を作成するためには、まずオペレーティングシステムの機能を使ってディレクトリを作成し、正しい所有権を設定します。
mkdir /data/dbs chown postgres:postgres /data/dbs
次にPostgreSQL内でテーブル空間作成コマンドを発行します。
CREATE TABLESPACE dbspace LOCATION '/data/dbs';
他のデータベースユーザが所有するテーブル空間を作成するには、以下のようにコマンドを使います。
CREATE TABLESPACE indexspace OWNER genevieve LOCATION '/data/indexes';
CREATE TABLESPACE
はPostgreSQLの拡張です。