创建和管理表空间
创建和管理表空间#
OushuDB 使用表空间(TABLESPACE)和 文件空间(FILESPACE)管理表数据的存放位置。
创建文件空间时,需要指定存储系统的URL,例如:
CREATE FILESPACE myfs ON HDFS ('hdfs_server:9000/oushudb/filespace1');
之后创建表空间,绑定之前的文件空间。
注意使用这个命令需要已经启动一个HDFS服务器。如果已经配置好HORC环境,那就直接可以使用。
CREATE TABLESPACE myts FILESPACE myfs;
创建表空间本身必须用数据库超级用户身份进行,但之后你就可以允许普通数据库用户利用它了。要做这件事情,在表空间上给这些用户授予CREATE权限。
表、索引和整个数据库都可以放在特定的表空间里,另外模式也可以指定表空间,方便在建表没有显示指定表空间时,选择该模式下表的默认表空间。想要这么做的话,在给定表空间上有CREATE权限的用户必须把表空间的名字以一个参数的形式传递给相关的命令。比如,下面的命令在表空间space1上创建一个表:
CREATE TABLE foo(i int) TABLESPACE myts;
另外,还可以使用default_tablespace参数:
SET default_tablespace = myts;
CREATE TABLE foo(i int);
只要default_tablespace被设置为非空字符串,那么它就为没有明确使用TABLESPACE子句的CREATE TABLE 和CREATE INDEX命令提供一个隐含的子句。
与数据库关联的表空间用于存储该数据库的系统目录以及由使用该数据库的服务器进程创建的任何临时文件。此外,如果在创建对象时未给出TABLESPACE子句(显式或通过default_tablespace),则它是为在数据库内创建的表和索引选择的缺省表空间。如果创建的数据库没有为其指定表空间,则它使用与从其复制的模板数据库相同的表空间。
当数据库集群初始化时,自动创建两个表空间。pg_global表空间用于共享的系统表。pg_default是template1和template0数据库的缺省表空间 (因此,这个表空间也将是任何其它数据库的缺省表空间,除非在CREATE DATABASE 中通过TABLESPACE子句重写)。
创建了表空间之后,它就可以用于任何数据库,只要请求的用户有足够权限。这意味着除非我们把使用这个表空间的所有数据库里的所有对象都删除掉,否则我们不能删除该表空间。
要删除一个空的表空间,使用DROP TABLESPACE命令。
检查pg_tablespace 系统表就可以获取现有的表空间,比如
SELECT spcname FROM pg_tablespace;
psql程序的 \db 元命令也可以用于列出现有表空间。