PostgreSQL にはデータベースのデフォルトの表領域があります。 テーブルなどのデータベースのオブジェクトを作成するときに 表領域を指定しなければ、そのデータベースのデフォルトの表領域に作成されます。
次の場合、データベース database1 は tablespace1 を デフォルトの表領域として設定しています。
db=# \x Expanded display is on. db=# \l+ List of databases -[ RECORD 1 ]-----+-------------------------- Name | database1 Owner | postgres Encoding | UTF8 Collation | en_US.UTF-8 Ctype | en_US.UTF-8 Access privileges | Size | 51 MB Tablespace | tablespace1 Description |
このデフォルトの表領域の変更ですが PostgreSQL の 8.4 からは ALTER DATABASE 文で 行うことができます。
db=# ALTER DATABASE database1 SET TABLESPACE tablespace2;
これで表領域が tablespace2 になります。
db=# \l+ List of databases -[ RECORD 1 ]-----+-------------------------- Name | database1 Owner | postgres Encoding | UTF8 Collation | en_US.UTF-8 Ctype | en_US.UTF-8 Access privileges | Size | 51 MB Tablespace | tablespace2 Description |
データベースクラスタのデフォルトの表領域に変更する場合は 次のように表領域に pg_default を指定します。
db=# ALTER DATABASE database1 SET TABLESPACE pg_default;
8.4 までは createdb コマンドを使って次のように 変更したりしていたんですが、バージョンアップの内容も 追いかけておかないと 新しいバージョンを使ってるメリットを享受できないですね。
$ createdb -T database1 -D pg_default database2;