OushuDB 创建和管理表空间

简介: OushuDB 里的表空间允许数据库管理员在文件系统里定义那些代表数据库对象的文件存放位置。一旦创建了表空间,那么就可以在创建数据库对象的时候引用它。通过使用表空间,管理员可以控制一个OushuDB 安装的磁盘布局。这么做至少有两个用处。首先,如果初始化集群所在的分区或者卷用光了空间,而又不能扩展,那么表空间可以在一个不同的分区上创建和使用,直到系统可以重新配置。

image.png

OushuDB 里的表空间允许数据库管理员在文件系统里定义那些代表数据库对象的文件存放位置。一旦创建了表空间,那么就可以在创建数据库对象的时候引用它。
通过使用表空间,管理员可以控制一个OushuDB 安装的磁盘布局。这么做至少有两个用处。首先,如果初始化集群所在的分区或者卷用光了空间,而又不能扩展,那么表空间可以在一个不同的分区上创建和使用,直到系统可以重新配置。
第二,表空间允许管理员根据数据库对象的使用模式安排数据位置,从而优化性能。比如,一个很频繁使用的索引可以放在非常快并且非常可靠的磁盘上,比如一种非常贵的固态设备。而同时,一个存储归档的数据,很少使用的或者对性能要求不高的表可以存储在一个便宜且比较慢的磁盘系统上。
要定义一个表空间,使用CREATE TABLESPACE命令,比如:

CREATE TABLESPACE fastspace LOCATION '/mnt/sda1/postgresql/data';

这个位置必须是一个现有的空目录,并且属于OushuDB 系统用户。所有随后在该表空间创建的对象都将被存放在这个目录下的文件里。
Note
通常在一个逻辑文件系统上建立多个表空间没有什么意义,因为无法控制一个逻辑文件系统里不同文件的位置。不过,OushuDB 并不做这方面的任何强制,并且它实际上并不知道文件系统边界。它只知道在指定的目录里存储文件。
创建表空间本身必须用数据库超级用户身份进行,但之后你就可以允许普通数据库用户利用它了。要做这件事情,在表空间上给这些用户授予CREATE权限。
表、索引和整个数据库都可以放在特定的表空间里。想要这么做的话,在给定表空间上有CREATE权限的用户必须把表空间的名字以一个参数的形式传递给相关的命令。比如,下面的命令在表空间space1上创建一个表:

CREATE TABLE foo(i int) TABLESPACE space1;

另外,还可以使用default_tablespace参数:

SET default_tablespace = space1;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元命令也可以用于列出现有表空间。
为了简化表空间的实现,OushuDB使用了符号连接。这就意味着表空间 只能 在支持符号连接的系统上使用。
目录$PGDATA/pg_tblspc包含指向集群里定义的每个非内置表空间的符号连接。尽管我们不建议,但是我们还是可以通过手工重定义这些连接来调整表空间的布局。注意两点:在服务器运行的时候不要这么干。注意在重启服务器后,你仍需要用新的位置更新 pg_tablespace表。如果你不这么做,pg_dump将继续显示旧的表空间位置。

目录
相关文章
|
关系型数据库 数据库 PostgreSQL
管理数据库和表空间
数据库是使用CREATE DATABASE,并且用DROP DATABASE命令删除)。
|
SQL 存储 分布式计算
OushuDB 创建和管理外部表(上)
OushuDB 创建和管理外部表(上)
64 0
|
SQL 数据库
OushuDB 创建和管理外部表(下)
OushuDB 创建和管理外部表(下)
81 0
|
SQL HIVE 数据格式
OushuDB 创建和管理外部表(中)
OushuDB 创建和管理外部表(中)
75 0
|
存储 SQL Oracle
《 OushuDB:将数据库升级到下一级的正确选择》
《 OushuDB:将数据库升级到下一级的正确选择》
90 0
OushuDB-准备导出的表
OushuDB-准备导出的表
49 0
|
SQL 存储 分布式计算
OushuDB 创建和管理外部表(上)
外部表是一个数据存储在数据库外部的OushuDB数据库表,允许OushuDB对存储在数据库之外的数据源中的数据进行访问,就像数据存储在常规数据库表中一样。外部表分可读和可写,数据可以从外部表读取或写入。它和常规数据库表的用法一样, 可以执行INSERT、SELECT、JOIN等操作。外部表通常用于快速并行加载和卸载数据库数据。
169 0
OushuDB 创建和管理外部表(上)
|
存储 Oracle 关系型数据库
Oracle 数据库表空间不足拓展方法实例演示,表空间剩余大小查看,通过新增表空间文件拓展表空间,表空间文件路径查看
Oracle 数据库表空间不足拓展方法实例演示,表空间剩余大小查看,通过新增表空间文件拓展表空间,表空间文件路径查看
266 0
Oracle 数据库表空间不足拓展方法实例演示,表空间剩余大小查看,通过新增表空间文件拓展表空间,表空间文件路径查看
|
数据库
OushuDB 管理指南 备份恢复(中)
pg_dump和pg_restore是一种串行备份和恢复方式,对大数据库来说从运行时间和空间来看都不适合。所以只适用于非常小的数据库备份。
120 0
OushuDB 管理指南 备份恢复(中)
|
数据库
OushuDB 管理指南 备份恢复(上)
使用gpfdist外部表进行备份的步骤: 检查数据库的大小,确定gpfdist使用的文件系统有充分的空间 ● 使用pg_dump导出需要备份的数据schema ● 启动gpfdist并创建使用gpfdist的writable外部表 ● 备份数据
129 0
OushuDB 管理指南 备份恢复(上)