CREATE TABLESPACE
用于注冊一個新的集群范圍的表空間。
簡介
CREATE TABLESPACE
注冊一個新的集群范圍的表空間。表空間的名稱必須與集群中現有的任何表空間不同。
表空間用于在文件系統上定義另一個位置,可以把包含數據庫對象 (例如表和索引)的數據文件放在那里,并且可以把 tablespace_name
傳遞給 CREATE DATABASE
、CREATE TABLE
、 CREATE INDEX
或者ADD CONSTRAINT
來讓這些對象的數據文件存儲在指定的表空間中。
只有polar_superuser用戶可以創建表空間,普通客戶無法創建。
對于polar_superuser用戶,支持將對象存儲在指定表空間的語法,但是實際上對象還是在pg_default表空間下,執行過程中會返回提醒信息。對于普通用戶,不支持該語法。
語法
CREATE TABLESPACE tablespace_name
[ OWNER { new_owner | CURRENT_USER | SESSION_USER } ]
LOCATION 'directory'
[ WITH ( tablespace_option = value [, ... ] ) ]
參數
tablespace_name
要創建的表空間的名稱。名稱不能以pg_開頭。user_name
將擁有該表空間的用戶名。如果省略,默認為執行該命令的用戶。只有polar_superuser用戶能創建表空間。directory
要被用于表空間的目錄。該目錄必須存在(CREATE TABLESPACE
將不創建它),應該為空,并且必須由PolarDB系統用戶擁有。該目錄必須用一個絕對路徑指定。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
不能在一個事務塊內被執行。表空間不能獨立于定義它的集群使用。
示例
您可以在pg_tablespace系統表中查詢polar_superuser用戶創建的表空間。
執行如下語句,使用polar_superuser用戶創建表空間。
CREATE TABLESPACE test_tablespace location '/';
執行如下語句,在pg_tablespace系統表中查詢表空間。
SELECT spcname FROM pg_tablespace;
返回結果如下:
spcname ----------------- pg_default pg_global test_tablespace
執行如下語句,使用polar_superuser用戶創建數據庫對象并指定表空間。
CREATE TABLE test_table(a int) TABLESPACE test_tablespace;
返回結果如下:
NOTICE: User defined tablespace is not supported, The tablespace set by the user will be ignored CREATE TABLE