PostgreSQL的表空间

article/2025/11/9 14:04:54

PostgreSQL之表空间

1、什么是PG中的表空间(tablespace)?

pg中的表空间实际上就是文件系统中的一个目录, 是pg中数据库对象(包括表、索引等)的容器。

Pg使用操作系统的文件系统进行对象存储,每个数据库对象都有自己的数据文件,如果对象很大,它将会被分为多个文件,单个文件大小的上限是1GB。表空间就是包含这些数据文件的目录。

简而言之,表空间是告诉PG服务器将数据库对象的物理文件放在哪里。

2、表空间的分类?

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

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

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

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

3、查看当前集群中所有的表空间?

PSQL使用"\db+"命令,可以详细列出表空间。

也可以使用sql查看所有表空间:

select oid,* from pg_tablespace;

4、表空间的创建和使用?

1)要创建表空间,首先创建一个新目录,注意该目录需要属于“postgres”操作系统用户。

2)使用sql创建表空间。

CREATE TABLESPACE mytbsp LOCATION '/tmp/mytbsp';

3)使用表空间。

大多数“create” SQL命令都带有一个“TABLESPACE”选项,我们可以使用这个选项指定SQL对象的表空间。

如:

在表空间mytbsp中创建一个名为testdb的数据库。注:此后该数据库中所有对象的默认表空间也成为mytbsp。

create database testdb tablespace mytbsp;

在mytbsp表空间中创建一个表newtab。

CREATE TABLE newtab (

   id  integer NOT NULL,

   val text    NOT NULL

) TABLESPACE mytbsp;

注意:索引并不会继承与表的表空间。

在mytbsp表空间中创建索引对象。

CREATE INDEX newtab_val_idx ON newtab (val)
   TABLESPACE mytbsp;

另外,ALTER命令可以更改任何对象的表空间。

更改newtab的表空间为pg_default。

alter table newtab set tablespace pg_default;

我们也可以将一个表空间中的所有表(或索引)都移动到另外一个表空间。

alter table all in tablespace mytbsp set tablespace pg_default;

注意:将对象移动到另一个表空间将复制数据文件,在这个期间涉及到的对象将被锁定,不可访问。

5、含有自定义表空间的集群的备份?

如果对包含表空间的数据库执行文件系统备份,则必须备份所有表空间。

使用普通格式的pg_basebackup将尝试将表空间保存在与数据库服务器上相同的位置(-D选项仅指定数据目录的位置)。要将数据从表空间备份到不同的位置,必须使用选项--tablespace-mapping=olddir=newdir。对于多个表空间,可以多次使用此选项。

pg_basebackup --format=p --tablespace-mapping=/tmp/mytbsp=/tmp/mytbsp2backup -D plainbackup

6、流复制场景下使用表空间?

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

7、使用表空间的优点?

当存储分区没有空间时,可以使用表空间把数据存到其他分区。

利用表空间对数据库进行性能优化。如频繁使用的数据表或索引放在高性能的硬盘上,而较少使用的放在普通硬盘上。(注意,这时候需要调整表空间参数:seq_page_cost和random_page_cost

8、使用表空间的缺点?

使用表空间使数据库管理(比如备份和流复制)更加复杂,因为数据目录不再包含所有数据。

9、其他

临时表空间: 临时表和索引是由PostgreSQL在显式请求(“CREATE TEMP TABLE..”)或需要临时保存大数据集以完成查询时创建的。可以告诉PG将这些对象放在单独的表空间中。例如,如果在正常过程中创建了太多临时表,那么可以通过将这些对象放在具有更快、更大、未压缩文件系统甚至内存文件系统的表空间中来加快查询速度。使用选项temp_tablespaces告诉Postgres使用哪个表空间创建临时表。


http://chatgpt.dhexx.cn/article/Xlgvhp25.shtml

相关文章

Oracle表空间、用户详解

目录 新建连接三者关系表空间创建表空间修改表空间和数据文件修改数据文件容量新增表空间的数据文件重命名数据文件修改表空间状态修改数据文件状态 删除表空间查询 用户创建删除查询修改 新建连接 工具选择: 我们一般会选择一个工具来连接本地的Oracle&#xff0c…

49-Linux_malloc及4G虚拟空间分布

文章目录 malloc及4G虚拟空间分布1.malloc2.32位操作系统进程的4G虚拟空间分布1) 代码区(Text egment):2) 全局初始化数据区/静态数据区(Data Segment)3) 未初始化数据区(BSS):4) 堆区(heap):5) 栈区(stack): malloc及4G虚拟空间分…

(微信开发)Laya转发H5网页到微信,带图片

网页转发到微信时,带图片和自定义标题。2022年11月22号 关键解说 _wx.config({ debug: _wx_configdebug, appId: e.appId, timestamp: e.timestamp, nonceStr: e.nonceStr, signature: e.signature, jsApiList: [ // 所有要调用的 API 都要加到这个列表中 ‘onMen…

移动端H5页面开发的几种方法

单位: px 宽度百分比,高度px 在不同屏幕下的效果是不一样的,可用媒体查询(media)对不同宽度的手机进行适配,麻烦,不推荐使用 单位:rem 1、flexible 用法:https://blog.c…

H5页面调用微信支付

1、H5页面使用微信支付,首先需要注册微信公众号,在设置与开发>公众号设置>功能设置中配置业务域名、JS接口安全域名、网页授权域名。支付功能页面需在此域名链接下的页面。 2、加入域名后,就可以在H5页面调用微信支付功能。首先请求后台…

H5实现移动端,PC端页面分享

想做个页面分享功能,既要兼容移动端,也要兼容PC端。 找了一轮,决定PC端用百度分享的api: http://share.baidu.com/code/advance 移动端一开始想用soshm.js,发现ios没问题,但安卓手机在微信上点微博完全没…

app端内h5页面使用微信h5支付

app端内h5页面使用微信h5支付 app端内h5页面使用微信h5支付一、起初使用的方法二、解决方法三、最后 app端内h5页面使用微信h5支付 一、起初使用的方法 在对接支付宝支付的时候,我是使用window.open()直接打开后端返回的链接,完全没有任何问题&#xf…

H5页面内嵌到微信小程序和APP,做分享操作

前言 最近接到项目新需求,H5项目需要内嵌到微信小程序和APP里,然后将H5页面分享出去,被分享的人可以点击消息跳转到H5页面。H5页面不难,难的是要与微信小程序和APP进行交互,因为以前也没有接触过,所以这里…

H5及H5页面是什么意思?如何制作H5页面?

H5是HTML5的简称。HTML5是HTML最新的修订版本,是一种超文本标记语言。H5有两大特点:首先,强化了 Web 网页的表现性能。其次,追加了本地数据库等 Web 应用的功能。 H5页面就是利用html5制作出来的页面,尤其在微信中发展…

拿走!H5版本ChatGPT开源等你

近些日子忙里偷闲的研究chatGPT,也小弄了一个公众号版本,一个H5版本的,现在H5版本的也就是开放给大家体验的版本,还不知道的伙伴可以关注#公众号:李连活,回复“888”领取体验,和AI畅快聊天问答。…

不懂技术,如何轻松制作微信H5页面?

H5这个由HTML5简化而来的词汇,正通过微信广泛传播。H5是集文字、图片、音乐、视频、链接等多种形式的展示页面,丰富的控件、灵活的动画特效、强大的交互、实现信息传播,非常适合通过手机的展示、分享。也因其灵活性高、开发成本低、制作周期短…

关于浏览器加载不出图片的问题

刚刚才解决 幸好有截图,不然口说无凭了 分割线 我试过上网搜过问题,但是好像都没什么用 接连好多次这样加载图片加载不出来,我就开始想怎么解决了 今天灵机一动,是不是图片的缓存这些太多,导致浏览器加载不出来呢。…

解决loadrunner 12 录制时打不开Chrome谷歌浏览器,显示正在加载中的问题

解决loadrunner 12 录制时打不开Chrome谷歌浏览器,显示正在加载中的问题 刚开始学习loadrunner,安装了loadrunner 12,录制时浏览器一直显示正在加载… 看到网上有人说录制的时候打开Fiddler就可以了,试了下确实可以。但如果录制的…

chrome插件与本地exe程序之间的信息交互

一、概述 如果想要通过本地exe程序与chrome插件之间的通信,我们需要利用到NativeMessage。 具体环境与实现步骤见下文。 二、环境 1. window10操作系统 2. chrome浏览器 3. pycharm 三、实现步骤 1. 自己编写一个chrome插件 chrome插件的开发详细步骤与文件结构可…

win10更新后 chrome内核浏览器总是打开网页一直加载 甚至打不开 解决方法

升级win10之后如果出现chrome内核的浏览器网页总是打不开 打开很慢 而ie和edge是可以正常访问的 用这个方法可以 我弄了几天终于 搞好了 我直接转载过来了 近期,工程师收到大量反馈360浏览器,极速模式无法打开网页,兼容模式无此问题。 IE浏览…

客户端工具登录异常问题分析

1、首先判断是用户名密码是否错了; 2、在用户名密码正确的前提下,需要查看oninit程序的权限是否正确。如果权限异常,也会存在上述问题的 1、通常可以理解成informix弱口令的问题,调整弱口令之后,等几分钟即可

(十)服务端异常退出

(十)服务端异常退出 之前讲解了客户端异常退出的代码,但是服务端也是会异常退出的。如果服务端异常退出,它会将所有在线的客户的状态都设置为offline。即,让所有用户都下线。 异常退出一般是CTRL C时,我们…

统一异常处理 GlobalExceptionHandler

平时经常在代码里面 try {... } catch (Exception e) {... }这样子代码繁琐而且也不好看。特别是还有一些需要自己new一个map封装业务的异常信息,是在是难看。所以就需要引出全局异常。经过一些封装,就可以实现这样的效果了。 还是看代码吧&#xff01…

【异常】使用ApiFox客户端提示 “ 加载出错,请检查网络是否异常”,但是Web端是正常访问的

一、报错内容 提示内容类似于如下:连接Apifox服务器出错,请检查网络是否异常 二、报错说明 可能是因为APIFOX升级版本了,导致的问题,目前没有找到根因 三、报错解决 3.1 解决方案 1 使用Chrome的插件——Apifox Agent&#…

(七)客户端异常退出事件处理

如果客户端异常退出了,我们会从服务端记录用户连接的 _connMap 表中找到改用户,如果它断连了就从此表中删除,并设置其状态为 offline。 因为记录用户连接情况的表是可能被多个线程操作的,所以访问表的操作都要使用互斥锁进行保护。…