管理表空间

  • 一、基本概念
  • 二、创建表空间
  • 三、修改表空间
  • 四、删除表空间

一、基本概念

在 PostgreSQL 中,它是通过表空间(Tablespaces)来实现逻辑对象(表、索引等)与物理文件之间的映射。创建数据库或者数据表(包括索引)的时候,可以为其指定一个表空间
(tablespace)。表空间决定了这些对象在文件系统中的存储路径。

在PostgreSQL 中,表空间(tablespace)表示数据文件的存放目录,这些数据文件代表了数据库的对象,例如表或索引。当我们访问表时,系统通过它所在的表空间定位到对应数据文件所在的位置。

在这里插入图片描述

表空间的引入为 PostgreSQL 的管理带来了以下好处:

  • 如果数据库集群所在的初始磁盘分区或磁盘卷的空间不足,又无法进行扩展,可以在其他分区上创建一个新的表空间以供使用。
  • 管理员可以根据数据库对象的使用统计优化系统的性能。例如,可以将访问频繁的索引存放到一个快速且可靠的磁盘上,比如昂贵的固态硬盘。与此同时,将很少使用或者对性能要求不高的归档数据表存储到廉价的低速磁盘上。

PostgreSQL 在集群初始化时将所有的数据文件和配置文件存储到它的数据目录中,通常是环境变量PGDATA 的值。默认创建了两个表空间:

  • pg_defaulttemplate1template0 默认的表空间,也是创建其他数据库时的默认表空间;对应的目录为PGDATA/base
  • pg_global,用于存储一些集群级别的共享系统表(system catalogs),例如 pg_databasepg_control;对应的目录为PGDATA/global

初始安装后,使用 psql 查询默认创建的表空间:
在这里插入图片描述

同时也可以通过操作系统命令查看相应的目录:
在这里插入图片描述

其中的 base 和 global 目录分别对应表空间 pg_default 和 pg_global。

二、创建表空间

创建新的表空间使用CREATE TABLESPACE 语句:

CREATE TABLESPACE tablespace_name
OWNER user_name
LOCATION 'directory';

表空间的名称不能以 pg_开头,它们是系统表空间的保留名称;LOCATION 参数必须指定绝对路径名,指定的目录必须是一个已经存在的空目录,PostgreSQL 操作系统用户(postgres)必须是该目录的拥有者,以便能够进行文件的读写。

接下来,我们使用目录/var/lib/pgsql/创建一个新的表空间 app_tbs。先创建所需的目录:
在这里插入图片描述

注意目录的所有者和权限。然后使用具有 CREATEDB 权限的用户创建表空间,此处我们使用 postgres 执行以下操作:

create tablespace app_tbs location '/var/lib/pgsql/app_tbs';

在这里插入图片描述

我们查看一下操作系统中的变化:

在这里插入图片描述

在表空间对应的目录中,创建一个特定版本的子目录。与此同时,在数据目录下的 pg_tblspc 子目录中,创建了一个指向表空间目录的符号链接,名称为表空间的 OID(16743):

在这里插入图片描述

默认情况下,执行 CREATE TABLESPACE 语句的用户为该表空间的拥有者,也可以使用OWNER 选项指定拥有者。

对于普通用户,需要授予表空间上的对象创建权限才能使用该表空间。我们为用户 admin01 授予表空间 app_tbs 上的使用权限:
在这里插入图片描述

使用admin01 用户连接到数据库 testdb,然后在表空间app_tbs 中创建一个新的数据表t:
在这里插入图片描述

PostgreSQL 支持在 CREATE DATABASE、 CREATE TABLE、 CREATE INDEX 以及 ADD CONSTRAINT 语句中指定 tablespace_name 选项,覆盖默认的表空间(pg_default)。也可以使用相应的 ALTER …语句将对象从一个表空间移到另一个表空间。

如果不想每次创建对象时手动指定表空间,可以使用配置参数 default_tablespace:

set default_tablespace = app_tbs;

三、修改表空间

如果需要修改表空间的定义,可以使用 ALTER TABLESPACE 语句:

-- 用于表空间的重命名
ALTER TABLESPACE name RENAME TO new_name;-- 用于修改表空间的拥有者
ALTER TABLESPACE name OWNER TO { new_owner | CURRENT_USER | SESSION_USER };-- 后两个语句用于设置表空间的参数
ALTER TABLESPACE name SET ( tablespace_option = value [, ... ] );ALTER TABLESPACE name RESET ( tablespace_option [, ... ] );

将表空间 app_tbs 重命名为 admin01_tbs:
在这里插入图片描述

只有表空间的拥有者或超级用户才能修改表空间的定义。接下来将表空间 admin01_tbs 的拥有者修改为 admin01:

在这里插入图片描述

PostgreSQL 支 持设 置的 表空 间参 数包 括 seq_page_cost、 random_page_cost 以 及
effective_io_concurrency。它们用于查询计划器选择执行计划时的代价评估。

目前,PostgreSQL 还不支持使用语句修改表空间的存储路径。但是,可以通过手动的方式移动表空间的位置:

  1. 停止 PostgreSQL 服务器进程;
  2. 移动文件系统中的数据文件位置;
  3. 修改 PGDATA/pg_tblspc 目录中的符号链接文件(需要提前获取文件名),指向新的目录;
  4. 启动 PostgreSQL 服务器进程。

四、删除表空间

对于不再需要的表空间,可以使用 DROP TABLESPACE 语句进行删除:

DROP TABLESPACE [ IF EXISTS ] name;
-- IF EXISTS 可以避免删除不存在的表空间时产生错误信息。

只有表空间的拥有者或超级用户能够删除表空间。删除表空间之前需要确保其中不存在任何数据库对象,否则无法删除。删除表空间时,同时会删除文件系统中对应的表空间子目录。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94153.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94153.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/94153.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

趣打印高级版--手机打印软件!软件支持多种不同的连接方式,打印神器有这一个就够了!

软件介绍(文末获取)趣打印高级版是一款手机打印软件。软件支持五种不同的连接方式,每种都有稳定且快速的反应,用户均可通过手机进行打印机的远程使用和设置。软件还支持上传不同格式的文档类型进行打印,方便快捷&#…

【开源框架】7 款流行的 Vue 3 后台管理框架对比

以下是 7 个流行的 Vue 3 后台管理框架在 Star 数(截至 2025 年 8 月21日的 GitHub 最新数据)、框架特点、基于的技术栈及开源协议四个方面的详细对比: 1. Vue-Vben-Admin GitHub 地址:https://github.com/vbenjs/vue-vben-admin…

Datawhale工作流自动化平台n8n入门教程(一):n8n简介与平台部署

前言 在数字化时代,重复性的工作任务正在消耗着我们大量的时间和精力。从数据同步到营销自动化,从客户服务到内容管理,这些琐碎但必要的任务往往让我们疲于应对。而工作流自动化工具的出现,为我们提供了一个优雅的解决方案。 今天…

SRE - 定位与能力

仅为个人知识总结与记录 Site Reliability Engineer:站点可靠性工程(SRE 软件工程师 运维专家 可靠性专家) 相对传统的运维工程师,SER 注重开发,效率,追求自动化。对于 SRE 工程师,追究的就是…

StarRocks学习4-查询优化与性能调优

✅ 1. 执行计划分析(EXPLAIN) 🌟 作用: 用于查看 SQL 的执行路径,判断是否命中索引、物化视图、Join 策略、并行度等。 📌 常用命令: EXPLAIN SELECT ...; EXPLAIN VERBOSE SELECT ...;&#x1…

CentOS系统安装Git全攻略

文章目录✅ 方法一:使用 yum 或 dnf 包管理器安装(推荐)1. 更新系统软件包(非必须)[^1]2. 安装 Git3. 验证安装✅ 方法二:从源码编译安装(适用于需要自定义版本或配置)1. 安装依赖包2. 下载 Git 源码3. 编译…

VR交通安全学习机-VR交通普法体验馆方案

VR交通安全学习机是一种基于虚拟现实技术的互动式教育设备,旨在通过虚拟环境模拟真实的交通场景,帮助用户深入了解交通规则、交通信号、道路安全等知识,并通过沉浸式的体验让他们亲身感受到不遵守交通规则的后果。无论是驾驶员、行人还是骑行…

算法题(188):团伙

审题: 本题需要我们通过解析所有人之间的关系,从而判断出朋友团体的总个数并输出 思路: 方法一:扩展域并查集 由于这里涉及对朋友/敌人等关系集合的频繁操作,所以我们需要使用并查集来操作,但是普通的并查集…

C++开发/Qt开发:单例模式介绍与应用

单例模式是软件设计模式中最简单也是最常用的一种创建型设计模式。它的核心目标是确保一个类在整个应用程序生命周期中只有一个实例,并提供一个全局访问点。笔者白话版理解:你创建了一个类,如果你希望这个类对象在工程中应用时只创建一次&…

Linux笔记---策略模式与日志

1. 设计模式设计模式是软件开发中反复出现的问题的通用解决方案,它是一套套被反复使用、多数人知晓、经过分类编目的代码设计经验总结。设计模式并非具体的代码实现,而是针对特定问题的抽象设计思路和方法论。它描述了在特定场景下,如何组织类…

关于多个el-input的自动聚焦,每输入完一个el-input,自动聚焦到下一个

讲解原理或者思路:如果你有多个el-input,想要实现每输入完一个输入框,然后自动聚焦到下一个输入框,同理,如果每删除一个输入框的值,自动聚焦到上一个输入框。条件那么首先要做的就是,设置条件,在…

AI 赋能教育变革:机遇、实践与展望

引言说明教育在社会发展中的重要地位,以及传统教育面临的困境。引出 AI 技术为教育变革带来新机遇,阐述研究其在教育中应用的价值。AI 为教育带来的机遇个性化学习支持:讲解 AI 通过分析学生学习数据,如答题情况、学习时间等&…

(一)八股(数据库/MQ/缓存)

文章目录 项目地址 一、数据库 1.1 事务隔离级别 1. 事务的四大特性 2. Read Uncommited脏读(未提交读) 3. Read Commited幻读(sql默认已提交读) 4. Repeatable Read 5. Serializable 6. Snapshot(快照隔离) 7. 代码开启 8. For update和Repeatable Read的区别 1.2 各种锁 …

STM32H750 CoreMark跑分测试

STM32H750 CoreMark跑分测试🔎CoreMark跑分测试查询网站:https://www.eembc.org/coremark/scores.php📜 CoreMark源码:https://www.github.com/eembc/coremarkCoreMark移植和配置参考:https://community.st.com/t5/stm…

RabbitMQ如何确保消息发送和消息接收

消息发送确认 1 ConfirmCallback方法 ConfirmCallback 是一个回调接口,消息发送到 Broker 后触发回调,确认消息是否到达 Broker 服务器,也就是只 确认是否正确到达 Exchange 中。 2 ReturnCallback方法 通过实现 ReturnCallback 接口&#xf…

Linux:进程间通信-管道

Linux:进程间通信-管道 前言:为什么需要进程间通信? 你有没有想过,当你在电脑上同时打开浏览器、音乐播放器和文档时,这些程序是如何协同工作的?比如,浏览器下载的文件,为什么能被文…

Jmeter + FFmpeg 直播压测遇到的问题及解决方案

1、压测机安装FFmpeg,下载安装步骤可见:https://zhuanlan.zhihu.com/p/692019886 2、Jmeter与FFmpeg位数要一致,不允许在32位的进程中运行一个64位的程序,反之亦然 3、OS进程取样器(Thread Group -> Add -> Sa…

安卓app、微信小程序等访问多个api时等待提示调用与关闭问题

安卓app、微信小程序访问webapi,将需要一时间,我们称之为耗时操作,其它诸如密集型计算、访问文件与设备等亦是如此。在这个期间我们应该跳出提示,告知用户正在等待,并且很多时候,在等待时不允许用户再对UI进…

一个状态机如何启动/停止另一个状态机

一个状态机如何启动/停止另一个状态机 这个过程主要依赖于动作列表(Action List) 中的特定动作项和状态管理服务(ARA::SM)提供的API。 1. 通过动作列表(Action List)进行预配置控制 这是最常见的方式&#…

基于IPO智能粒子优化的IIR滤波器参数识别算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.部分程序 4.算法理论概述 5.完整程序 1.程序功能描述 IIR(Infinite Impulse Response)滤波器即无限冲激响应滤波器,其输出不仅与当前和过去的输入有关,还与过去的输出…