深入PostgreSQL中的pg_global表空间

news2024/12/24 10:18:55

pg_global表空间的位置

在PG当中,一个实例(cluster)初始化完以后,你会看到有下边两个与表空间相关的目录生成: $PGDATA/base $PGDATA/global

我们再用元命令\db+以及相关视图看看相应的表空间信息:

postgres=# \db+                 List of tablespaces  Name  | Owner  | Location | Access privileges | Options | Size  | Description------------+----------+----------+-------------------+---------+---------+------------- pg_default | postgres |     |          |     | 2683 MB | pg_global | postgres |     |          |     | 576 kB |(2 rows)postgres=# select * from pg_tablespace; oid | spcname  | spcowner | spcacl | spcoptions------+------------+----------+--------+------------ 1663 | pg_default |    10 |    | 1664 | pg_global |    10 |    |(2 rows)

postgres=# \! oid2nameAll databases:  Oid Database Name Tablespace---------------------------------- 16391      demo pg_default 16521   internals pg_default 16401      mydb pg_default 16402    postgres pg_default 14485   template0 pg_default 16400   template1 pg_default

这里头,pg_default对应的就是默认数据库的表空间。默认情况下,所有新建的数据库对象都建立在这个表空间下,对应的根目录是$PGDATA/base。而pg_global对应的是全局表空间,对应的根目录是$PGDATA/global。

pg_global表空间里放了啥?

那么它里边到底放了些什么? 首先我们继续使用oid2name -s命令,它可以列出所有表空间的oid的值:

postgres=# \! oid2name -sAll tablespaces:  Oid Tablespace Name----------------------- 1663    pg_default 1664    pg_global

官方文档中的定义是,pg_global中存放的都是同一个实例当中全局共享的对象。

我们可以想象,你database, tablespace之类的,甚至还有role之类的定义,肯定要放到全局共享的地方,以保证每个数据库在检索的时候,可以检索得到。

除此以外,应该还有很多其它全局对象。可以通过相关的查询一步步得到。

postgres=# create tablespace myts location '/pgccc/myts';CREATE TABLESPACEpostgres=# select * from pg_tablespace; oid | spcname  | spcowner | spcacl | spcoptions-------+------------+----------+--------+------------ 1663 | pg_default |    10 |    | 1664 | pg_global |    10 |    | 24917 | myts    |    10 |    |(3 rows)

再分析一下tablespace的oid值:

db1=# select oid, reltablespace from pg_class where relname='pg_database'; oid | reltablespace------+--------------- 1262 |     1664(1 row)db1=# select distinct(reltablespace) from pg_class; reltablespace---------------     1664       0(2 rows)

居然会有reltablespace的值为0的。它到底指的是哪个表空间,显而易见,它就是pg_default表空间。另外一个1664那个才是pg_global表空间的reltablespace的值。

有了这个值,我们想找出所有的全局共享对应就比较容易了。

postgres=# select relname from pg_class where reltablespace != 0;         relname----------------------------------------- pg_toast_1262_index pg_toast_2964_index pg_toast_1213_index pg_toast_1260_index pg_toast_2396_index pg_toast_6000_index pg_toast_3592_index pg_toast_6100_index pg_database_datname_index pg_database_oid_index pg_db_role_setting_databaseid_rol_index pg_tablespace_oid_index pg_tablespace_spcname_index pg_authid_rolname_index pg_authid_oid_index pg_auth_members_role_member_index pg_auth_members_member_role_index pg_shdepend_depender_index pg_shdepend_reference_index pg_shdescription_o_c_index pg_replication_origin_roiident_index pg_replication_origin_roname_index pg_shseclabel_object_index pg_subscription_oid_index pg_subscription_subname_index pg_authid pg_toast_1262 pg_toast_2964 pg_toast_1213 pg_toast_1260 pg_toast_2396 pg_toast_6000 pg_toast_3592 pg_toast_6100 pg_database pg_db_role_setting pg_tablespace pg_auth_members pg_shdepend pg_shdescription pg_replication_origin pg_shseclabel pg_subscription(43 rows)

上边43行值是所有的对象名。

还可以将它们进行分类:

1、 所有的全局表:

postgres=# select relname from pg_class where reltablespace = 1664 and relkind='r';    relname----------------------- pg_authid pg_database pg_db_role_setting pg_tablespace pg_auth_members pg_shdepend pg_shdescription pg_replication_origin pg_shseclabel pg_subscription(10 rows)

2、所有的全局表、包括toast表

postgres=# select relname from pg_class where reltablespace = 1664 and relkind in ('r', 't');    relname----------------------- pg_authid pg_toast_1262 pg_toast_2964 pg_toast_1213 pg_toast_1260 pg_toast_2396 pg_toast_6000 pg_toast_3592 pg_toast_6100 pg_database pg_db_role_setting pg_tablespace pg_auth_members pg_shdepend pg_shdescription pg_replication_origin pg_shseclabel pg_subscription(18 rows)

3、汇成一条SQL语句:

postgres=# with global as (select oid from pg_tablespace where spcname='pg_global') select relname, relkind from pg_class, global where reltablespace=global.oid order by relkind;
                 relname                 | relkind
-----------------------------------------+---------
 pg_db_role_setting_databaseid_rol_index | i
 pg_toast_2964_index                     | i
 pg_toast_1213_index                     | i
 pg_toast_1260_index                     | i
 pg_toast_2396_index                     | i
 pg_toast_6000_index                     | i
 pg_toast_3592_index                     | i
 pg_toast_6100_index                     | i
 pg_database_datname_index               | i
 pg_database_oid_index                   | i
 pg_toast_1262_index                     | i
 pg_tablespace_oid_index                 | i
 pg_tablespace_spcname_index             | i
 pg_authid_rolname_index                 | i
 pg_authid_oid_index                     | i
 pg_auth_members_role_member_index       | i
 pg_auth_members_member_role_index       | i
 pg_shdepend_depender_index              | i
 pg_shdepend_reference_index             | i
 pg_shdescription_o_c_index              | i
 pg_replication_origin_roiident_index    | i
 pg_replication_origin_roname_index      | i
 pg_shseclabel_object_index              | i
 pg_subscription_oid_index               | i
 pg_subscription_subname_index           | i
 pg_subscription                         | r
 pg_db_role_setting                      | r
 pg_tablespace                           | r
 pg_auth_members                         | r
 pg_shdepend                             | r
 pg_shdescription                        | r
 pg_replication_origin                   | r
 pg_shseclabel                           | r
 pg_authid                               | r
 pg_database                             | r
 pg_toast_1262                           | t
 pg_toast_2964                           | t
 pg_toast_1213                           | t
 pg_toast_1260                           | t
 pg_toast_2396                           | t
 pg_toast_6000                           | t
 pg_toast_3592                           | t
 pg_toast_6100                           | t
(43 rows)

大家看到里边有表、toast表、索引。

pg_global表空间里放了啥?

关于relkind有哪些值?我们一样也可以得到。

postgres=# \dtS+
********* QUERY **********
SELECT n.nspname as "Schema",
  c.relname as "Name",
  CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 't' THEN 'TOAST table' WHEN 'f' THEN 'foreign table' WHEN 'p' THEN 'partitioned table' WHEN 'I' THEN 'partitioned index' END as "Type",
  pg_catalog.pg_get_userbyid(c.relowner) as "Owner",
  CASE c.relpersistence WHEN 'p' THEN 'permanent' WHEN 't' THEN 'temporary' WHEN 'u' THEN 'unlogged' END as "Persistence",
  am.amname as "Access method",
  pg_catalog.pg_size_pretty(pg_catalog.pg_table_size(c.oid)) as "Size",
  pg_catalog.obj_description(c.oid, 'pg_class') as "Description"
FROM pg_catalog.pg_class c
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
     LEFT JOIN pg_catalog.pg_am am ON am.oid = c.relam
WHERE c.relkind IN ('r','p','t','s','')
  AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;
**************************

其有效值就是以下这些:

c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 't' THEN 'TOAST table' WHEN 'f' THEN 'foreign table' WHEN 'p' THEN 'partitioned table' WHEN 'I' THEN 'partitioned index'
​
r: table
v: view
m: materialized view
i: index
S: sequence
s: special
t: TOAST table
f: foreign table
p: partitioned table
I: partitioned index

关键时候很有用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

synchronized 关键字 - 监视器锁 monitor lock

目录 一、1 synchronized 的特性 1、互斥 2、可重入 二、synchronized 使用示例 1、修饰代码块: 明确指定锁哪个对象. 2、直接修饰普通⽅法: 锁的 SynchronizedDemo 对象 3、修饰静态方法: 锁的 SynchronizedDemo 类的对象 我们重点要理解,synchronized 锁…

Java设计模式 | 原型模式

是什么 用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。该模式的核⼼思想是基于现有的对象创建新的对象,⽽不是从头开始创建。 结构 抽象原型接口:声明一个克隆自身的方法clone()具体原型类&#xf…

飞书API(2):通过 Python 读取多维表数据

上一篇介绍了怎么通过官方的控制台调用飞书的 API 读取多维表数据,本篇介绍怎么通过 Python 读取多维表数据。 通过 Python 读取多维表主要分两步: 第一步是获取 access_token;第二步是拿 access_token 读取数据。 先说第二步,因…

SQLAlchemy 建立数据库模型之间的关系

常见关系: 一对多关系多对一关系多对多关系一对一关系 一对多关系(一个作者,多篇文章) ## 一对多关系,单作者-多文章,外键不可少 ## 外键(ForeignKey)总在多的那边定义,关系(relationship)总在单的那边定…

【计算机网络】四层负载均衡和七层负载均衡

前言 1、分层方式 首先我们知道,在计算机网络中,常用的协议分层方式:OSI和TCP/IP,以及实际生产中使用的协议划分方式。 在OSI中,各层的职责如下: 应用层:对软件提供接口以使程序能使用网络服…

CVAE——生成0-9数字图像(Pytorch+mnist)

1、简介 CVAE(Conditional Variational Autoencoder,条件变分自编码器)是一种变分自编码器(VAE)的变体,用于生成有条件的数据。在传统的变分自编码器中,生成的数据是完全由潜在变量决定的&…

9.图像中值腐蚀膨胀滤波的实现

1 简介 在第七章介绍了基于三种卷积前的图像填充方式,并生成了3X3的图像卷积模板,第八章运用这种卷积模板进行了均值滤波的FPGA实现与MATLAB实现,验证了卷积模板生成的正确性和均值滤波算法的MATLAB算法实现。   由于均值滤波、中值滤波、腐…

【QT+QGIS跨平台编译】054:【exiv2lib+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

点击查看专栏目录 文章目录 一、exiv2lib介绍二、文件下载三、文件分析四、pro文件五、编译实践一、exiv2lib介绍 exiv2lib 是一个用于处理图像元数据的开源 C++ 库。它可用于读取、编辑和写入图像文件中的 Exif 元数据(Exchangeable Image File Format,可交换图像文件格式)…

怎么打包出release.aar包

第一种 选择build variant 更改成release 第二钟 在gradle中选择相应任务来编译 选择assemble release如果没有这个选项,可能是你没有开启那个Task 收集的选项

机器学习——降维算法-奇异值分解(SVD)

机器学习——降维算法-奇异值分解(SVD) 在机器学习中,降维是一种常见的数据预处理技术,用于减少数据集中特征的数量,同时保留数据集的主要信息。奇异值分解(Singular Value Decomposition,简称…

为 Linux 中的 Docker 配置阿里云和网易云国内镜像加速下载中心

由于默认情况下,Docker 的镜像下载中心默认为国外的镜像中心,使用该镜像中心拉去镜像会十分缓慢,所以我们需要配置国内的 Docker 镜像下载中心,加速 Docker 镜像的拉取。Docker 的国内镜像下载中心常用的有:阿里云、网…

微信小程序(黑马优购:购物车页面)

1.渲染商品页面 <template><view><!-- 商品列表的标题区域 --><view class"cart-title"><!-- 左侧的图标 --><uni-icons type"shop" size"18"></uni-icons><!-- 右侧的文本 --><text class…

力扣 1143. 最长公共子序列

题目来源&#xff1a;https://leetcode.cn/problems/longest-common-subsequence/description/ C题解&#xff08;思路来源代码随想录&#xff09;&#xff1a;动态规划。 1. 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j]&#xff1a;长度为[0, i - 1]…

Python之Opencv进阶教程(1):图片模糊

1、Opencv提供了多种模糊图片的方法 加载原始未经模糊处理的图片 import cv2 as cvimg cv.imread(../Resources/Photos/girl.jpg) cv.imshow(girl, img)1.1 平均值 关键代码 # Averaging 平均值 average cv.blur(img, (3, 3)) cv.imshow(Average Blur, average)实现效果 1.2…

备战蓝桥杯---贪心刷题1

话不多说&#xff0c;直接看题&#xff1a; 本质是一个数学题&#xff1a; 我们令xi<0表示反方向传递&#xff0c;易得我们就是求每一个xi的绝对值之和min,我们令平均值为a爸。 易得约束条件&#xff1a; x1-x2a1-a,x2-x3a2-a..... 解得x1x1-0,x2x1-((n-1)*a-a2-...an)。…

通过搜索引擎让大模型获取实时数据-实现类似 perplexity 的效果

文章目录 一、前言二、初衷三、实现方式四、总结 一、前言 汇报一下这周末的工作&#xff0c;主要是开发了一门课程&#xff1a;通过搜索引擎让大模型获取实时数据&#xff0c;第一次开发一门课程&#xff0c;难免会有很多不熟悉和做的不好的地方。 已经训练好的大模型有气数…

今天起,Windows可以一键召唤GPT-4了

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 发布在https://it.weoknow.com 更多资源欢迎关注 微软 AI 大计的最后一块拼图完成了&#xff1f; 把 Copilot 按钮放在 Window…

【Linux】权限的基本概念

在本篇博客中&#xff0c;作者将会讲解在linux系统中&#xff0c;权限的基本概念。 一.什么是权限 通俗的讲&#xff0c;权限是用来约束人的。比如说&#xff1a;你买了某软件的vip会员&#xff0c;那么你就可以执行相对操作&#xff0c;如果你没买&#xff0c;则就会有权限约束…

Linux的中间件

我们先补充点关于awk的内容 awk的用法其实很广。 $0 表示整条记录 变量&#xff1a; NF 一行中有多少个字段&#xff08;表示字段数&#xff09; NR &#xff1a; 代表当前记录的序号&#xff0c;从1开始计数。每读取一条记录&#xff0c;NR的值就会自动增加1。&#xff08;…

基于ssm旅游资源网站(java项目+文档+源码)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的旅游资源网站。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 旅游资源网站的主要使用者分为管理…