目录
前言
一、创建表空间
CREATE TABLESPACE命令创建一个表空间。例如:
CREATE TABLESPACE fastspace LOCATION '/fastdisk/mpp';
数据库超级用户定义表空间并通过GRANT CREATE 命令赋予数据库用户访问权限。 例如:
GRANT CREATE ON TABLESPACE fastspace TO admin;
二、存储数据库对象
在一个表空间上拥有CREATE特权的用户可以在其中创建数据库对象,例如表、索引和数据库。命令是:
CREATE TABLE tablename(options) TABLESPACE spacename;
例如,下列命令在表空间space1中创建一个表:
CREATE TABLE foo(i int) TABLESPACE space1;
用户也可以使用default_tablespace参数为没有指定表空间的 CREATE TABLE和CREATE INDEX命令指定默认表空间:
SET default_tablespace = space1;
CREATE TABLE foo(i int);
三、查看表空间
每个数据库系统有如下默认表空间:
- pg_global 用于共享系统的catalogs
- pg_default,默认表空间。由template1和template0数据库使用
这些表空间使用系统的默认文件空间,其数据目录位置在系统初始化时被创建。
要查看表空间信息,请从pg_tablespace表获取表空间的对象ID(OID),然后使用gp_tablespace_location()函数显示表空间路径。 下面是一个包含有一 个用户定义的表空间myspace的例子:
SELECT oid, * FROM pg_tablespace ;
oid | spcname | spcowner | spcacl | spcoptions
-------+------------+----------+--------+------------
1663 | pg_default | 10 | |
1664 | pg_global | 10 | |
16391 | myspace | 10 | |
(3 rows)
# SELECT * FROM gp_tablespace_location(16391);
gp_segment_id | tblspc_loc
---------------+------------------
0 | /data/mytblspace
1 | /data/mytblspace
-1 | /data/mytblspace
(3 rows)
WITH spc AS (SELECT * FROM gp_tablespace_location(16391))
SELECT seg.role, spc.gp_segment_id as seg_id, seg.hostname, seg.datadir, tblspc_loc
FROM spc, gp_segment_configuration AS seg
WHERE spc.gp_segment_id = seg.content ORDER BY seg_id;
四、删除表空间
要删除表空间,必须是表空间的所有者或者超级用户。直到所有依赖该表空间的对象都被删除才可以删除该表空间。DROP TABLESPACE命令删除一个空的表空间。无法删除一个非空或存储了临时或事务文件的表空间。
五、移动临时或事务文件的位置
可以将临时文件或事务文件移动到特定的表空间,以在运行查询,创建备份和更顺序地存储数据时提高数据库性能。数据库服务器配置参数 temp_tablespaces 控制哈希聚合和哈希连接查询的临时表和临时溢出文件的位置(用于排序大型数据集等目的的临时文件与<data_dir>/<seg_ID>/base/pgsql_tmp中的常规段数据一起存储)。当CREATE命令没有显式指定表空间时, temp_tablespaces指定了创建临时对象时使用的表空间(临时表和临时表上的index)。
另请注意有关临时文件或事务文件的以下信息:
-
尽管可以使用相同的表空间来存储其他类型的文件,但只能将一个表空间专用于临时文件或事务文件
-
无法删除一个被临时文件使用的表空间