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 创建和管理外部表(上)
61 0
|
SQL 数据库
OushuDB 创建和管理外部表(下)
OushuDB 创建和管理外部表(下)
78 0
|
SQL HIVE 数据格式
OushuDB 创建和管理外部表(中)
OushuDB 创建和管理外部表(中)
72 0
|
存储 关系型数据库 MySQL
InnoDB 独立表空间与共享表空间
InnoDB 独立表空间与共享表空间
111 0
InnoDB 独立表空间与共享表空间
OushuDB-准备导出的表
OushuDB-准备导出的表
47 0
|
SQL 存储 分布式计算
OushuDB 创建和管理外部表(上)
外部表是一个数据存储在数据库外部的OushuDB数据库表,允许OushuDB对存储在数据库之外的数据源中的数据进行访问,就像数据存储在常规数据库表中一样。外部表分可读和可写,数据可以从外部表读取或写入。它和常规数据库表的用法一样, 可以执行INSERT、SELECT、JOIN等操作。外部表通常用于快速并行加载和卸载数据库数据。
164 0
OushuDB 创建和管理外部表(上)
|
存储 Oracle 关系型数据库
Oracle 数据库表空间不足拓展方法实例演示,表空间剩余大小查看,通过新增表空间文件拓展表空间,表空间文件路径查看
Oracle 数据库表空间不足拓展方法实例演示,表空间剩余大小查看,通过新增表空间文件拓展表空间,表空间文件路径查看
264 0
Oracle 数据库表空间不足拓展方法实例演示,表空间剩余大小查看,通过新增表空间文件拓展表空间,表空间文件路径查看
|
Shell 数据库连接 数据库
「OushuDB」用户指南数据定义 创建和管理数据库 (下)
回顾一下 http://www.oushu.com/docs/ch/server-configuration.html 我们知道OushuDB 服务器提供了大量的运行时配置变量。你可以为许多这种变量设置特定于数据库的缺省数值。
146 0
「OushuDB」用户指南数据定义 创建和管理数据库 (下)
|
SQL 存储 关系型数据库
「OushuDB」用户指南数据定义 创建和管理数据库 (上)
数据库是一些SQL对象(“数据库对象”)的集合;通常每个数据库对象(表、函数等)属于并且只属于一个数据库。不过有几个系统表 (比如pg_database)属于整个集群并且可以在集群之内的每个数据库里访问。更准确地说,一个数据库是一个模式的集合,而模式包含表、函数等等。因此完整的层次是这样的:服务器→数据库→模式→表(或者其它类型对象,比如函数)。
174 0
「OushuDB」用户指南数据定义 创建和管理数据库 (上)