深入PostgreSQL中的pg_global表空间

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

关键时候很有用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

28. UE5 RPG同步面板属性(四)

在前面几篇中,我们实现了以下步骤: 首先我们需要通过c去实现创建GameplayTag,这样可以在c和UE里同时获取到Tag创建一个DataAsset类,用于设置tag对应的属性和显示内容创建AttributeMenuWidgetController实现对应逻辑 上面几步在前…

MySQL数据库下,使页面传入的数据与保存的数据编码一致

一、查询当前MySQL数据库的编码 (1)登录MySQL数据库(Windows系统):winR打开命令终端,cd到MySQL的bin目录,输入mysql -u root -p,回车后输入登录密码 (2)查看…

【C++】C++入门第一课(c++关键字 | 命名空间 | c++输入输出 | 缺省参数)

目录 前言 C关键字 命名空间 1.命名空间的定义 A.标准命名空间定义 B.命名空间允许嵌套定义 C.同名命名空间的合并 2.命名空间的使用 加命名空间名称及作用限定符 使用using将命名空间中某个成员引入 使用using namespace命名空间名称引入 C的输入和输出 缺省参数…

C++类基础5——拷贝构造函数,拷贝赋值运算符(复制构造函数,复制赋值运算符)

拷贝控制操作 当定义一个类时,我们显式地或隐式地指定在此类望的对象拷贝,移动、赋值和销毁时做什么。 一个类通定义五种特殊的成员函数来控制这些操作,包括:拷贝构造函数(copy consinuctor)、拷贝赋值运算符(copy-assignment op…

如何修复开机但不显示任何内容的计算机?这里提供详细步骤

前言​ 计算机“无法开机”的最常见方式是PC实际开机但在显示器上不显示任何内容。你看到电脑机箱上的灯,可能看到里面的风扇在转,甚至可能听到声音,但屏幕上什么也没有显示,请按照我们提供的顺序尝试以下常见修复方法。 测试显示器 在对计算机的其余部分进行更复杂和耗时…

Mac 下安装maven教程

note:网上已经有很多该类型教程了,这边自身保留一份,方便后面使用; 一、安装地址:官网 二、安装步骤 $ tar -xvf apache-maven-3.3.9-bin.tar.gz //mac支持手动点击解压 $ sudo mv -f apache-maven-3.3.9 /usr…

C语言函数递归调用

在C语言中,函数可以直接或间接地调用自身,这种函数调用自身的过程称为递归调用。递归是一种强大的编程技巧,能够简化程序结构、提高代码的可读性和可维护性。本文将介绍C语言函数递归调用的原理、应用场景以及注意事项。 以下是我整理的关于…

HANA中的内存及磁盘使用统计

1. 引言 在实际使用中,通过HANA的admin控制台,确实可以得到很多重要的信息。但有的时候不如人愿,你需要提供相应的SQL语句得到具体的信息。 比如,我要得到所有的行表的内存及磁盘占用信息;我需要得到所有列表的内存及…

[WebGL] 实例化绘制性能测试

实例化绘制( Instanced Drawing )是 OpenGL / WebGL 等图形 API 中常用的性能优化技术,它适用于同样的模型绘制次数非常多的场景,能够有效的降低显存占用和图形 API 接口调用的次数,达到性能提升的效果。以前我只知道怎…

蓝桥杯 java 承压计算

题目: 思路: 1:其中的数字代表金属块的重量(计量单位较大) 说明每个数字后面不一定有多少个0 2:假设每块原料的重量都十分精确地平均落在下方的两个金属块上,最后,所有的金属块的重量都严格精确地平分落在最底层的电子…

QT 二维坐标系显示坐标点及点与点的连线-通过定时器自动添加随机数据点

QT 二维坐标系显示坐标点及点与点的连线-通过定时器自动添加随机数据点 功能介绍头文件C文件运行过程 功能介绍 上面的代码实现了一个简单的 Qt 应用程序,其功能包括: 创建一个 MainWindow 类,继承自 QMainWindow,作为应用程序的…

物联网学习1、什么是 MQTT?

MQTT(Message Queuing Telemetry Transport)是一种轻量级、基于发布-订阅模式的消息传输协议,适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它在物联网应用中广受欢迎,能够实现传感器、执行器和其它设备之间的高效通…

FLASH的读取与写入

FLASH的写入 结合HAL库所给参数: 查阅具体使用芯片的参考手册。 就不在详细解释,英文自行翻译。具体代码如下: /*FLASH写入程序*/ void WriteFlashTest(uint32_t L, uint32_t addr, uint32_t *Data,int Page) {int i0;/* 1/4解锁FLASH*/HAL…

揭秘五力模型:轻松掌控企业竞争命脉,决策不再迷茫!

五力分析模型又成为波特五力模型是由著名的管理学者迈克尔波特(Michael Porter)在20世纪80年代初提出的一种理论框架,它对企业营销中的战略制定产生了全球性的深远影响。这一模型被广泛应用于企业竞争战略的分析,可以帮助企业有效地分析企业在营销环境中…

python-pytorch获取FashionMNIST实际图片标签数据集

在查看pytorch官方文档的时候,在这里链接中https://pytorch.org/tutorials/beginner/basics/data_tutorial.html的Creating a Custom Dataset for your files章节,有提到要自定义数据集,需要用到实际的图片和标签。 在网上找了半天没找到&a…

蓝海项目!黑科技引爆全网流量小红书拉新,单日暴力收益7000+,小白也能轻松上手【揭秘】

众所周知,自去年以来,图文作品在各大平台如快手和抖音的流量大增,这得益于这些平台与小红书的竞争。目前,小红书也在积极推广,成功推荐新用户下载应用的奖励高达15元,这一数字几乎是其他平台的几倍。此外&a…

【TypeScript】解决字面量类型推断错误的四种方式

解决字面量类型推断错误的四种方式 方式一:对象属性使用类型断言方式二:传参使用类型断言方式三:对象使用类型断言方式四:对象属性使用变量,变量使用字面量类型参考 declare function handleRequest(url: string, meth…

深入理解HDFS工作原理:大数据存储和容错性机制解析

** 引言: ** 在当今数据爆炸的时代,存储和管理大规模数据成为了许多组织面临的重要挑战。为了解决这一挑战,分布式文件系统应运而生。Hadoop分布式文件系统(HDFS)作为Apache Hadoop生态系统的核心组件之一&#xff…

Java | Leetcode Java题解之第2题两数相加

题目: 题解: class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode head null, tail null;int carry 0;while (l1 ! null || l2 ! null) {int n1 l1 ! null ? l1.val : 0;int n2 l2 ! null ? l2.val : 0;int sum…

罗永浩直播阿里云服务器ECS u1性能如何?值得买吗?

罗永浩直播卖阿里云服务器,企业专享云服务器ECS通用算力型u1实例是什么?性能如何?目前阿里云服务器ECS u1实例,2核4G,5M固定带宽,80G ESSD Entry盘,优惠价格199元一年,罗永浩今晚直播…