系统明天上线,PG表空间还不规划好疯狂给同事埋雷

📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前服务于工业互联网
擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

文章目录

    • 📣 1.PG表空间
      • ✨ 1.1 表空间概述
      • ✨ 1.2 表空间作用
      • ✨ 1.3 表空间分类
    • 📣 2.表空间使用授权
    • 📣 3.表空间管理
      • ✨ 3.1 新建表空间
      • ✨ 3.2 使用表空间
      • ✨ 3.3 修改表空间
      • ✨ 3.4 删除表空间
    • 📣 4.常用数据字典
    • 📣 5.注意事项
      • ✨ 5.1 流复制场景
      • ✨ 5.2 表空间备份
    • 📣 6.其他说明
    • 📣 7.总结


PG表空间可以有效的解决集群分区不足或者是卷空间不足的问题,最终提高PG数据库性能,本文做了详细的说明。

📣 1.PG表空间

✨ 1.1 表空间概述

PostgreSQL支持表空间,相比较其他RDBMS不同。PostgreSQL中的表空间是一个目录,
其中包含基本目录之外的一些数据。是一个用于管理数据库对象(如表、索引等)物理存储位置的概念。
简而言之,表空间是告诉PG服务器将数据库对象的物理文件放在哪里

✨ 1.2 表空间作用

1.磁盘布局控制:通过创建不同的表空间来优化磁盘布局,
以适应不同的存储需求和性能要求。
2.性能优化:表空间可以根据数据库对象的使用模式来优化性能。
3.多对多的关系:在PostgreSQL集群中,一个表空间可以被多个数据库使用,
而一个数据库也可以使用多个表空间。
总之:能合理利用磁盘性能和空间,
制定最优的物理存储方式来管理数据库表和索引

✨ 1.3 表空间分类

1.默认表空间:pg_default ,
是用户表、用户表index、和临时表、临时表index、内部临时表的默认空间。
对应文件系统目录$PADATA/base/。

2.系统字典表表空间:pg_global,存放系统字典表,
如pg_database、pg_authid、pg_tablespace等表以及它们的索引。
对应文件系统目录$PADATA/global/。

其中pg_default和pg_global是在PG集群initdb之后默认创建的

3.自定义表空间:用户创建的表空间。
对应文件系统目录$PGDATA/pg_tblspc/,
当手动创建表空间时,该目录下会自动生成一个软链接,指向表空间设定的路径。

其中test_tbs是用户创建的表空间。
查看pg_tblspc目录下,发现有一个软链接16385
注:16471是这个表空间test_tbs的OID
postgres=# select oid,* from pg_tablespace;
指向表空间设定的路径,此处为/home/postgres/app_tbs

📣 2.表空间使用授权

表空间的创建本身一般要求数据库超级用户完成
默认情况下,执行CREATE TABLESPACE语句的用户为该表空间的拥有者,
也可以使用OWNER选项指定拥有者。
对于普通用户,需要授予表空间上的对象创建权限才能使用该表空间

1.创建普通用户jeames
create user jeames login password ‘123456’;
2.创建schema proadm
postgres=# create schema proadm;
3.为用户 jeames 授予表空间test_tbs上的使用权限:
postgres=# GRANT CREATE ON TABLESPACE test_tbs TO jeames;
–授权用户jeames使用schema:proadm
postgres=# grant all on schema proadm to jeames;
–修改用户jeames默认schema为proadm
postgres=# alter user jeames set search_path to proadm;
4.用户jeames登陆
postgres=# \c postgres jeames
You are now connected to database “postgres” as user “jeames”.
4.用户jeames建表指定表空间
postgres=# CREATE TABLE test (id int) tablespace test_tbs;

5.查询表对应表空间
select schemaname,tablename,tablespace
from pg_tables where schemaname=‘proadm’;

📣 3.表空间管理

✨ 3.1 新建表空间

--创建一个新目录,注意该目录需要属于“postgres”操作系统用户
[postgres@centos79 ~]$ mkdir -p /home/postgres/my_tbs
--登陆超级用户创建
postgres=# CREATE TABLESPACE mytbsp LOCATION '/home/postgres/my_tbs';
CREATE TABLESPACE
postgres=# \dbList of tablespacesName    |  Owner   |        Location        
------------+----------+------------------------mytbsp     | postgres | /home/postgres/my_tbspg_default | postgres | pg_global  | postgres | test_tbs   | postgres | /home/postgres/app_tbs
(4 rows)

✨ 3.2 使用表空间

PostgreSQL 支持在CREATE DATABASE、CREATE TABLE、CREATE INDEX以及ADD CONSTRAINT语句中指定 tablespace_name 选项,覆盖默认的表空间(pg_default)

–创建数据库指定
create database mydb tablespace mytbsp;

–创建表指定
CREATE TABLE newtab (
id integer NOT NULL,
val text NOT NULL
) TABLESPACE mytbsp;
注意:索引并不会继承与表的表空间。

–创建索引指定
CREATE INDEX newtab_idx ON newtab (val) TABLESPACE test_tbs;

–如果不想每次创建对象时手动指定表空间,
可以使用配置参数 default_tablespace:
alter user jeames SET default_tablespace to mytbsp;

✨ 3.3 修改表空间

只有表空间的拥有者或超级用户才能修改表空间的定义

1.表空间重命名
我们将表空间 app_tbs 重命名为 user_tbs:
ALTER TABLESPACE app_tbs RENAME TO user_tbs;

2.修改拥有者
接下来将表空间 user_tbs 的拥有者修改为 jeames
ALTER TABLESPACE user_tbs OWNER TO jeames;

3.更改任何对象的表空间
更改newtab的表空间为user_tbs。
alter table newtab set tablespace user_tbs;

4.表空间中的所有表(或索引)都移动到另外一个表空间
alter table all in tablespace mytbsp set tablespace user_tbs;

✨ 3.4 删除表空间

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

无法删除的表空间是因为数据库中存在使用该表空间创建的对象。
通过以下语句查询删除即可

SELECT ts.spcname,
cl.relname
FROM pg_class cl
JOIN pg_tablespace ts ON cl.reltablespace = ts.oid
WHERE ts.spcname = ‘user_tbs’;

📣 4.常用数据字典

1.内置函数pg_relation_filepath
内置函数pg_relation_filepath非常有用,
因为此函数返回具有指定OID或名称的关系的文件路径名。

postgres=> SELECT pg_relation_filepath('test');pg_relation_filepath           
-----------------------------------------pg_tblspc/16471/PG_15_202209061/5/16474cd $PGDATA
ls -la -h pg_tblspc/16471/PG_15_202209061/5/16474
-rw-------. 1 postgres postgres 0 Mar 18 22:11 pg_tblspc/16471/PG_15_202209061/5/16474
-rw-------. 1 postgres postgres 0 Mar 18 22:11 pg_tblspc/16471/PG_15_202209061/5/16474.1

注意:默认当表和索引的文件大小超过1GB时,
PostgreSQL会创建一个名为relfilenode.1的新文件并使用它。
如果新文件被填满,PostgreQL会创建另一个名的新文件,
如relfilenode.2,以此类推。

2.数据与表空间的对应关系
查看数据库存放在哪个表空间中
select a.datname,b.spcname from pg_database a , 
pg_tablespace b where a.dattablespace=b.oid;datname  |  spcname   
-----------+------------postgres  | pg_defaulttemplate1 | pg_defaulttemplate0 | pg_defaultmydb      | mytbsp
3.数据库的表空间
postgres=# select oid,* from pg_tablespace;oid  |  oid  |  spcname   | spcowner |                 spcacl                  | spcoptions 
-------+-------+------------+----------+-----------------------------------------+------------1663 |  1663 | pg_default |       10 |                                         | 1664 |  1664 | pg_global  |       10 |                                         | 16471 | 16471 | test_tbs   |       10 | {postgres=C/postgres,jeames=C/postgres} | 16477 | 16477 | mytbsp     |       10 | {postgres=C/postgres,jeames=C/postgres} | 
(4 rows)

📣 5.注意事项

✨ 5.1 流复制场景

流复制场景下表空间的使用稍微复杂点,因为新表空间的路径没有同步到备用服务器上。
备用服务器上会期望在与主服务器相同的位置上有一个现有目录,并在该位置上创建一个表空间。

✨ 5.2 表空间备份

要将数据从表空间备份到不同的位置,必须使用选项–tablespace-mapping=olddir=newdir。对于多个表空间,可以多次使用此选项。
pg_basebackup --format=p
–tablespace-mapping=/tmp/mytbsp=/tmp/newmytbsp
-D plainbackup

📣 6.其他说明

1.在构建PostgreSQL时,
可以使用配置选项“–with segsize”
更改表和索引的最大文件大小。

2.每个表有三个数据文件
√一个文件用于存储数据,文件名是表的OID。
√一个文件用于管理表的空闲空间,文件名是OID_fsm。
√一个文件用于管理表的块是否可见,文件名是OID_vm。
√索引没有_vm文件,只有OID和OID_fsm两个文件

3.大小小于1GB的每个表或索引都存储在其所属数据库目录下的单个文件中。
表和索引由各个OID进行内部管理,
而它们的数据文件由变量relfilenode进行管理。
表和索引的relfilenode值基本上但并不总是与各自的OID匹配
SELECT relname, oid, relfilenode FROM pg_class
WHERE relname = ‘sampletbl’;

📣 7.总结

PostgreSQL中的表空间允许在文件系统中定义用来存放表示数据库对象的文件的位置
希望这个篇文章给你带来帮助

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

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

相关文章

天眼销批量查询功能上线

天眼销是一款提供企业线索的产品,致力于帮助客户获取最新的企业联系方式、工商信息等关键数据。 数据库收录全国 3.3亿及以上企业(含个体)线索,涵盖企业名称、企业状态、注册时间、注册资本、经营范围、法人信息、联系方式等维度,为用户提供…

【python开发】并发编程(上)

并发编程(上) 一、进程和线程(一)多线程(二)多进程(三)GIL锁 二、多线程开发(一)t.start()(二)t.join()(三)t.…

数据的响应式:实现动态数据驱动的技巧

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:StepperItem)

用作Stepper组件的页面子组件。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 支持单个子组件。 接口 StepperItem() 属性 参数名参数类型参数描述prevLabelstring设置左侧文本按钮内…

upload文件上传漏洞复现

什么是文件上传漏洞: 文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。“…

LeetCode108题:将有序数组转换为二叉搜索树(python3)

一个容易想到的思路:使用 nums 中最靠近中心的位置作为整棵 BST 的根节点,确保左右子树节点数量平衡。随后递归构造 nums 中下标范围为 [0,mid−1]作为左子树,递归构造 nums 中下标范围为 [mid1,n−1]作为右子树。 # Definition for a binar…

理论学习:with torch.no_grad()

如果不加上“with torch.no_grad():”,模型参数会发生改变吗? 如果不使用with torch.no_grad():,在进行模型推理(即计算outputs_cls net(inputs[batch_size//2:])这一步)时,模型参数不会发生改变&#xf…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Web)中篇

onBeforeUnload onBeforeUnload(callback: (event?: { url: string; message: string; result: JsResult }) > boolean) 刷新或关闭场景下,在即将离开当前页面时触发此回调。刷新或关闭当前页面应先通过点击等方式获取焦点,才会触发此回调。 参数…

开发验证一切正常,而测试人员在性能测试时偶发报错,如何解决?

在业务系统逻辑实现中,经常涉及异步执行、异步更新场景的开发和使用。但在性能测试中,经常会出现因为异步逻辑设计不合理引发的不可预知问题,比如在开发验证时一切正常,测试人员在性能测试时偶发报错。 本文从Spring事务、业务逻辑…

前端三件套 | 综合练习:模拟抽奖活动,实现一个简单的随机抽取并显示三名获胜者

随机运行结果如下&#xff1a; 参考代码如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><tit…

P2934 [USACO09JAN] Safe Travel G 题解

题意 给定一张 n n n 个点 m m m 条边的无向图&#xff0c;对于每个除 1 1 1 以外的点 u u u&#xff0c;求在不允许经过原来从 1 1 1 到 u u u 的最短路径的最后一条边时&#xff0c; 1 1 1 到 u u u 的最短路。 保证 1 1 1 到其他点的最短路唯一&#xff0c;无解输出…

git撤回代码提交commit或者修改commit提交注释

执行commit后&#xff0c;还没执行push时&#xff0c;想要撤销之前的提交commit 撤销提交 使用命令&#xff1a; git reset --soft HEAD^命令详解&#xff1a; HEAD^ 表示上一个版本&#xff0c;即上一次的commit&#xff0c;也可以写成HEAD~1 如果进行两次的commit&#xf…

鸿蒙Socket通信示例(TCP通信)

前言 DevEco Studio版本&#xff1a;4.0.0.600 参考链接&#xff1a;OpenHarmony Socket 效果 TCPSocket 1、bind绑定本地IP地址 private bindTcpSocket() {let localAddress resolveIP(wifi.getIpInfo().ipAddress)console.info("111111111 localAddress: " …

配置阿里云加速器

国内镜像中心常用阿里云或者网易云。在本地docker中指定要使用国内加速器的地址后&#xff0c;就可以直接从阿里云镜像中心下载镜像。 2024阿里云-上云采购季-阿里云 根据操作系统来选择。

RequestResponse使用

文章目录 一、Request&Response介绍二、Request 继承体系三、Request 获取请求数据1、获取请求数据方法&#xff08;1&#xff09;、请求行&#xff08;2&#xff09;、请求头&#xff08;3&#xff09;、请求体 2、通过方式获取请求参数3、IDEA模板创建Servlet4、请求参数…

【AUTOSAR】【通信栈】Fls

AUTOSAR专栏——总目录-CSDN博客文章浏览阅读592次。本文主要汇总该专栏文章,以方便各位读者阅读。https://blog.csdn.net/qq_42357877/article/details/132072415?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132072415%22…

金融知识分享系列之:MACD指标精讲

金融知识分享系列之&#xff1a;MACD指标精讲 一、MACD指标二、指标原理三、MACD指标参考用法四、MACD计算步骤五、MACD分析要素六、根据快线DIF位置判断趋势七、金叉死叉作为多空信号八、快线位置交叉信号九、指标背离判断行情反转十、差离值的正负十一、差离值的变化十二、指…

C语言之数据在计算机内部的存储

文章目录 一、前言二、类型的基本归类1、整型家族2、浮点数家族3、构造类型4、指针类型 三、整型在内存中的存储1、原码、反码、补码1.1 概念1.2 原码与补码的转换形式1.3 计算机内部的存储编码 2、大小端介绍~~2.1 为什么要有大端和小端之分&#xff1f;2.2 大&#xff08;小&…

https代理相对socks5代理有什么优势?

随着互联网的快速发展&#xff0c;代理服务已成为许多人在访问敏感或地理位置受限的网站时所依赖的工具。其中&#xff0c;HTTPS代理和SOCKS5代理是两种最常用的代理服务类型。本文将探讨HTTPS代理相对SOCKS5代理的优势。 1、安全性 HTTPS代理使用SSL/TLS协议对客户端和代理服…

力扣刷题Days20-151. 反转字符串中的单词(js)

目录 1,题目 2&#xff0c;代码 1&#xff0c;利用js函数 2&#xff0c;双指针 3&#xff0c;双指针加队列 3&#xff0c;学习与总结 1&#xff0c;正则表达式 / \s /&#xff1a; 2&#xff0c;结合使用 split 和正则表达式&#xff1a; 1,题目 给你一个字符串 s &am…