Greenplum表空间是让数据库使用多个文件系统来存储数据库的对象,当创建一个表空间时,需要指定路径,这些路径会通过软链接的方式关联到实例工作目录的pg_tblspc
目录下,并以tablespace_id
为名称,目录结构是GPDB_大版本号_系统表版本号(GPDB_6_301908232)。
表空间必须由超级用户才可以创建,使用语法如下:
CREATE TABLESPACE tablespace_name
[ OWNER user_name ]
LOCATION 'directory'
[ WITH ( tablespace_option = value [, ... ] ) ]
参数说明
tablespace name
要创建的表空间的名称。名称不能以 pg_ 或者 gp_,因为这些名称是为系统表空间保留的。
OWNER username
拥有表空间的用户名。如果省略,则默认为执行命令的用户。只有超级用户可以创建表空间,但是他们可以将表空间的所有权分配给非超级用户。
LOCATION '/path/to/dir'
目录的路径(主机系统文件位置),它将是表空间的根目录。注册表格时,该目录应该为空,并且必须归Greenplum数据库系统用户所有。该目录必须由不超过100个字符的路径名指定。
contentID_i='/path/to/dir_i'
值
ID_i
是细分实例的内容ID。/ path to dir_i
是段实例用作表空间的根目录的主机系统文件位置的路径。不能指定主实例的内容ID(-1)。只能为多个实例段指定相同的目录。
表空间使用实例
创建表空间
在每台服务器gpadmin用户下创建目录
mkdir /data/gp6/test
创建表空间及指定目录
CREATE TABLESPACE test_space LOCATION '/data/gp6/test';
或者以指定实例目录来创建表空间
CREATE TABLESPACE mytblspace LOCATION '/data/gp6/test_master'
WITH (content0='/data/gp6/test_1', content1='/data/gp6/test_2');
表空间赋权
表空间创建好后,需要赋权给普通用户使用的权限
grant CREATE ON TABLESPACE test_space TO user;
创建表时指定表空间
数据库创建表时可以指定表空间
create table test2(like pg_tables) TABLESPACE mytblspace distributed randomly;
或者可以设置表空间参数default_tablespace
来创建表
set default_tablespace= mytblspace;
create table test2(like pg_tables) distributed randomly;
修改表的表空间
test=# alter table public.test3 set tablespace mytblspace;
ALTER TABLE
获取表空间的信息
查找表空间的oid
test=# SELECT oid, spcname, spcowner FROM pg_tablespace ;
oid | spcname | spcowner
-------+------------+----------
1663 | pg_default | 10
1664 | pg_global | 10
18959 | test_space | 10
根据获取到的表空间oid查找存储的目录
test=# SELECT * FROM gp_tablespace_location(18959);
gp_segment_id | tblspc_loc
---------------+----------------
1 | /data/gp6/test
0 | /data/gp6/test
-1 | /data/gp6/test
删除表空间
如果表空间下有存储表或其它对象,该表空间是不能够被删除的。要删除表空间,能使用例drop tablespace命令来完成
,而且只能被其owner和超级用户才能删除。下面是删除的语法:
DROP TABLESPACE test_space;