数据库内核研发学习之路(五)创建postgres系统表

postgres新增系统表 每个系统表定义在src/include/catalog/pg_*.h文件中。主要包含三个部分。1、CATALOG定义宏,用于以统一的模式去定义系统表。2、 通过宏DATA(X)和DESCR(X)定义的insert操作。指系统表创建后立马插入的数据。3、一些和该表相关的宏定义。例如pg_class有一个relkind字段,记录对象的类型。有表(r),索引(i),序列(S),toast(t)等,对不同的类型直接定义对应的宏。 阅读详情

写在前面

在使用postgres的时候,有很多表是我们一开始安装好数据库就存在的,这些表称为系统表,他们记载一些数据库信息,比如我们做运维工作常用的pg_stat_activity;我们在数据库中查询这张表可以发现他存储了一些数据库连接信息。如下所示:

本次的任务就是新增一张系统表pg_test,这张表有三个字段,oid、id、ipaddr,字段所属的类型分别为Oid、int32、text,并且初始化一些值,实现能够在psql命令中使用select 命令查询得到。

1、创建系统表的声明

1.1、pg_extension系统表的理解

比如说我们查询pg_extension这张表,我们可以发现它具有这些信息

首先就是它具有一些字段属性,然后就是你会发现他还有index索引,有主键索引,有唯一性索引,然后我们在源码中搜索pg_extension找到这张系统表的声明,观察这张表的实现,对其进行模仿写出我们自己的pg_test系统表。

#ifndef PG_EXTENSION_H
#define PG_EXTENSION_H

#include "catalog/genbki.h"
#include "catalog/pg_extension_d.h"

CATALOG(pg_extension,3079,ExtensionRelationId)
{
	Oid			oid;			/* oid */
	NameData	extname;		/* extension name */
	Oid			ext
PostgreSQL学会如何建表 本文介绍了PostgreSQL的基本使用。首先说明了PostgreSQL采用客户端/服务器模型,介绍了常用客户端工具pgAdmin和命令行工具。接着讲解了如何创建数据库和表,包括数据库创建命令、表结构定义语法及数据类型选择。文中通过创建weather和cities两个表示范了建表过程,并说明了删除表或数据库的方法。最后提到PostgreSQL支持标准SQL类型和自定义数据类型,大小写不敏感,命令以分号结束。为后续讲解数据操作和查询奠定基础。 阅读详情

相关推荐

数据库内核研发学习之路(四)创建postgres拓展函数

紧接上章,熟悉postgres的都知道,它支持很多拓展,例如gist拓展、pg_top拓展之类,这些拓展是postgres拓展功能重要方法之一,下面就以例子实现拓展函数。

xiangxiao的博客 974

【0401】Postgres内核 CREATE DATABASE database-name 源码实现 ①

,您可以创建一个原始数据库(其中不存在任何用户定义的对象,且系统对象未被更改),其中仅包含您的 PostgreSQL 版本预定义的标准对象。如果您希望避免复制可能已添加到。用于创建一个新的 PostgreSQL 数据库。默认情况下,新数据库将通过克隆标准系统数据库。” 来指定不同的模板。参阅 CREATE ROLE。的任何安装本地对象,这将很有用。要创建数据库,您必须是超级用户(

Postgres 数据库内核开发工程师 669

【0402】Postgres内核 CREATE DATABASE database-name 源码实现 ②

事实证明,就 8.2 的 initdb 和 psql 而言,后端编码 ID 实际上是 libpq 应用二进制接口(ABI)的一部分。如果编码或区域设置为默认值,则使用源文件的设置。这里的源文件即指模板数据库(template1)中的 encoding 和 datcollate 等字段。如果您添加了一些编码,请别忘了检查 PG_ENCODING_BE_LAST 宏。PG_SQL_ASCII 是默认编码,且必须等于 0。Postgres数据库中的编码值定义于。之间的编码值仅用于客户端使用。

Postgres 数据库内核开发工程师 453

【0405】Postgres内核 CREATE DATABASE database-name 源码实现 ③ (向 pg_database 插入一个新元组(new tuple))

在 pg_database 中插入一个新的元组。这确立了我们对新数据库名称的所有权(任何其他人尝试插入相同的名称都会在唯一索引上被阻塞,并在我们提交后失败)。

Postgres 数据库内核开发工程师 404

【0044】 Postgres内核 实现创建数据库(CREATE DATABASE)的背后机制

文章目录1. 概述2. copydir()函数3. copy_file()函数4. 系统函数 1. 概述 在PostgreSQL的源码中,位于src/backend/storage/file/目录下有一个copydir.c文件,该文件中共实现了两个函数,分别是:copydir()和copy_file()。见名知义,这两个函数分别用于实现指定目录、文件的复制。它们的函数原型如下: void copydir(char *fromdir, char *todir, bool recurse) void copy

Postgres 数据库内核开发工程师 942

【0406】Postgres内核 CREATE DATABASE 之 构建一个 new tuple ④

此值的关键限制在于元组的固定开销大小加上空值位图的大小(每列 1 位),再加上 MAXALIGN 对齐,必须能放入 t_hoff 中,而 t_hoff 是 uint8 类型。在 createdb() 函数中已经构建(初始化)了 pg_database 系统表中一个元组所需的所有字段属性值(new_record[Natts_pg_database]),以及标识元组中是否有字段为空值的数组new_record_nulls[Natts_pg_database]。该宏声明于 htup_detail.h 头文件中。

Postgres 数据库内核开发工程师 309

【0403】Postgres内核 检查(procArray )给定 db 是否有其他 backend process 正在运行

则Postgres内核在初始化 backend process 时候, MyProc 中的 databaseId 值,来自 Postgres系统数据库 postgres中的 Oid。CREATE DATABASE 语句创建用户指定 数据库名(database-name)时候, 会通过 procArray 检查, 检查给定数据库中是否有其他后端正在运行。当前 procArray 中有效进程项数量(numProcs)有四个。(1)对于第 1 个 pgprocno。(2) 对于第 2 个 pgprocno。

Postgres 数据库内核开发工程师 586

【0420】Postgres内核 smgr + md + vfd 实现为指定 table(CREATE TABLE)创建 disk file ①

在已知待创建(CREATE TABLE)表的 tablespace OID、database OID 和 relation OID前提下, Postgres内核如何完成 为指定的关系表创建 physical disk file(物理磁盘文件)。

Postgres 数据库内核开发工程师 344

⑤ Postgres内核学习必备技能树

视频详细讲解学习 Postgres内核必备的技能树,包括编程语言(C/C++、Makefile、shell、SQL等)、开发工具(SourceInsight、Visual Studio、gdb等)、虚拟机环境、Linux操作系统原理、算法&数据结构、数据库原理等。

Postgres 数据库内核开发工程师 139

PostgreSQL的学习心得和知识总结(三十三)|深入理解PostgreSQL数据库后端文件postgres.bki及生成过程

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库链接,点击前往 4、postgresql数据库体系结构,点击前往 5、参考书籍:《PostgreSQL中文手册》 6、PostgreSQL数据库之系统表学习总结,点击前往 7、PostgreSQL的学习心得和知识总结(二十七)|PostgreSQL数据库系统表详解及新增系统表的实现.

孤傲小二~阿沐的博客 2502

PostgreSQL的学习心得和知识总结(二十七)|PostgreSQL数据库系统表详解及新增系统表的实现

PostgreSQL内核开发 新增系统表

孤傲小二~阿沐的博客 2026

Android开发Intent详解

本文详解Android开发Intent。

qq_30725967的博客 2412

【电磁场与电磁波课程设计】基于HFSS的双频微带天线仿真及设计

第五代移动通信技术(5G)的商用已经近在眼前,作为移动通信中最为重要的功能组件,面向5G通信应用的手机天线与基站天线的技术研究与设计成为近年来的热点。随着移动通信中“跳频”“扩频”等通信技术发展,为了满足与多个终端的通信要求,实现多系统共用和收发共用等功能,这就要求天线在不同频段下工作。根据国家工信部的最新规定,5G移动通信的中频段被划定在3.3 GHz-3.5 GHz及4.8 GHz-5.0 GH,面向5G移动通信的天线应具有高增益、小型化、宽频段及高隔离度等技术特征,以满足5G通信的高传输速率、波束智能

weixin_44450575的博客 1万+

INFFUS 2025 | DDBFusion:基于双重分解和贝塞尔曲线的统一图像分解与融合框架

现有的图像融合算法大多集中于网络架构和损失函数的设计,采用统一的特征提取策略,却忽略了冗余信息和有效信息的划分。然而,对于互补信息而言,统一的特征提取器可能并不适用。因此,本文提出了一种基于贝塞尔曲线图像增强和分层分解的统一图像融合算法,并构建了一个自监督学习任务来学习有意义的信息。其中,贝塞尔曲线旨在模拟不同的图像特征,并构建特殊的自监督学习样本,因此作者的方法不需要特定任务的数据,并且可以在公共自然图像数据集上轻松进行训练。同时,作者的双重分解自监督训练方法可以为模型赋予冗余信息过滤能力。

小白学视觉 306

共享单车数据抓取与分析:使用Python爬虫抓取共享单车使用数据与地图信息

通过本篇博客,我们展示了如何使用Python爬虫抓取共享单车的使用数据和地图信息,并通过简单的数据分析得出有价值的见解。在实际应用中,数据的收集与分析不仅能帮助城市管理者更好地规划单车站点,还能为用户提供更精准的单车使用体验。未来,我们可以将此分析与机器学习模型相结合,进一步预测单车的使用趋势,优化调度算法,实现更加智能的共享单车管理。

2201_76125261的博客 2204

运放+MOS恒流源电路仿真分析

利用运放设计一个恒流源

HW-BASE的博客 4080

深入理解 DDR5 Bank Group 与并行调度机制

Bank Group架构和并行调度机制,是DDR5性能跃升的核心秘密!理解它们才能写出高效调度程序,设计出性能强劲又稳定的DDR5系统。🎯记住:Bank Group不是简单的分组,而是高速并行的“魔法钥匙”,巧用它,你的DDR5设计将爆发惊人性能!

weixin_43199439的博客 310

YOLO26 旋转框检测 OBB 技术:角度预测与解码优化

YOLO26旋转框检测技术通过CSL角度编码有效解决了OBB检测中的周期性问题。该技术采用5参数表示法(cx,cy,w,h,θ),在检测头中分别处理分类、回归和角度预测。核心创新点包括:1)使用高斯或三角窗口的CSL编码对角度进行平滑表示;2)通过加权平均解码角度,避免边界不连续问题。该方法在遥感、文本检测等需要精确方向信息的场景中表现优异,相比传统HBB框可提升定位精度30%以上,同时保持了YOLO系列的高效特性。

一键难忘的博客 520

# 【WorkBuddy专栏33】工作空间,最大的WorkBuddy技巧——任务隔离、记忆分区与多项目管理实战

工作空间,最大的WorkBuddy技巧——任务隔离、记忆分区与多项目管理实战

AI人人懂 2101

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: 数据库内核研发学习之路(四)创建postgres拓展函数
下一篇: Linux进程通信之信号
会掉头发
博客等级 码龄6年 970粉丝 37原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会掉头发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值