今回は、Silverの「S3 開発/SQL - S3.1 SQL コマンド(テーブルスペース)」からの出題です。
テーブルを作成する際、 CREATE TABLE (…テーブル定義…) TABLESPACE テーブルスペース名; のようにすれば、指定したテーブルスペースが使用される。
※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2020年3月26日
テーブルスペースは、テーブルやインデックスなどの物理的な置き場所です。デフォルトではどのオブジェクトもデータベースクラスタを構成するディレクトリの下に置かれますが、テーブルスペースを作成することで、他の場所にオブジェクトを置くようにできます。
例えば、ディスク容量が不足して、別のパーティションをデータの置き場所として追加したいときや、使用頻度の高いテーブルやインデックスを、より高速なストレージ内に配置したいときなどがテーブルスペースを使用するケースとして考えられるでしょう。
PostgreSQLでは、テーブルスペースとしてディレクトリを指定します。例えば、作成するテーブルスペース名がmy_tablespace、使用するディレクトリが /path/to/my_tablespace だとすると、CREATE TABLESPACE my_tablespace LOCATION ‘/path/to/my_tablespace’ のようにして作成しますが、CREATE TABLESPACEは内部的に mkdir を実行しないので、事前にこのディレクトリを作成しておく必要があり、またこのディレクトリは空でなければなりません。Linuxなら、root ユーザで
mkdir /path/to/my_tablespace
chown postgres /path/to/my_tablespace
chmod 700 /path/to/my_tablespace
といった処理を実行しておきます。
CREATE TABLEの実行時、特に指定しなければデフォルトのテーブルスペースが使用されますが、CREATE TABLE my_table(...) TABLESPACE my_tablespace のように実行すれば、my_tablespaceが使用されます。
また、default_tablespace というパラメータがあるので、
SET default_tablespace = my_tablespace;
CREATE TABLE my_table(...);
とした場合も、my_tablespace が使用されます。
テーブルスペースを作成するにはスーパーユーザ権限が必要ですが、作成しただけでは一般ユーザはテーブルスペースにオブジェクトを作ることができません。オブジェクトを作るには
GRANT CREATE ON TABLESPACE my_tablespace TO somebody;
のようにして、テーブルスペースについてのCREATE権限が付与される必要があります。
テーブルスペースを削除するには DROP TABLESPACEコマンドを使用しますが、実行するにはテーブルスペースが空である必要があります。何らかのオブジェクトが入っているときは、まずそのオブジェクトを削除するか、他のテーブルスペースに移動する必要があります。
間違っているものを選ぶ問題なので、正解はEです。
今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。
※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.