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将继续显示旧的表空间位置。

目录
相关文章
|
传感器
蓝桥杯之单片机学习(二十八)——详解A/D、D/A、PCF8591、AD与DA的综合使用(附官方驱动的一个坑)
蓝桥杯之单片机学习(二十八)——详解A/D、D/A、PCF8591、AD与DA的综合使用(附官方驱动的一个坑)
1190 0
蓝桥杯之单片机学习(二十八)——详解A/D、D/A、PCF8591、AD与DA的综合使用(附官方驱动的一个坑)
|
监控 NoSQL Redis
Redis 哨兵模式高可用
Redis 哨兵模式高可用
281 4
|
8月前
|
NoSQL MongoDB 数据库
【直播回放】MongoDB全球开发者认证介绍线上直播 助力您掌握企业级实战能力
想通过MongoDB认证提升竞争力却无从下手?这场线上直播为你解惑!权威解读考试大纲、题型与评分标准,资深专家分享备考策略,涵盖学习计划、实战技巧及心理调整。更有最新认证激励政策、专属徽章与大礼包等你解锁!无论你是开发者、管理员还是学生,都能为职业发展铺路。立即预约3月26日直播回放,与MongoDB专家互动答疑,轻松迈向专业高峰!
|
关系型数据库 Unix 数据库
PostgreSQL开启远程访问
PostgreSQL开启远程访问
|
Web App开发 JavaScript 前端开发
2024年5月node.js安装(winmac系统)保姆级教程
本篇博客为2024年5月版Node.js安装教程,适用于Windows和Mac系统。作者是一名熟悉JavaScript与Vue的大一学生,分享了Node.js的基本介绍、下载链接及简单安装步骤。安装完成后,通过终端命令`node -v`验证版本即可确认安装成功。欢迎关注作者,获取更多技术文章。
484 2
2024年5月node.js安装(winmac系统)保姆级教程
|
存储 物联网 程序员
C语言与硬件交互
C语言因其低级别特性和高性能在系统编程和硬件交互中广泛应用。它提供内存操作和底层指令调用来直接控制硬件,尤其是在嵌入式系统、操作系统内核和驱动开发中。通过指针操作内存地址实现硬件寄存器的读写,或使用内联汇编调用底层指令,但要注意权限、内存映射、并发问题和硬件差异。文中还给出了简单的读写硬件状态和控制设备的C语言代码示例。在高级应用中,C语言用于编写驱动程序和实时操作系统,是底层开发的关键技能。
|
存储 人工智能 文字识别
极速搭建基于人工智能的OCR识别应用
本场景将使用阿里云函数计算,Serverless 应用中心,带大家 1分钟 Serverless 极速部署基于人工智能的OCR识别应用。
【51单片机】Kn独立按键控制【LED亮灭】【LED状态】【LED二进制式显示】【LED不断移位】(4)
【51单片机】Kn独立按键控制【LED亮灭】【LED状态】【LED二进制式显示】【LED不断移位】(4)
|
机器学习/深度学习 Serverless
机器学习入门案例-鸢尾花
机器学习入门案例-鸢尾花
394 0