postgresql内核开发之HelloWorld入门

PostgreSQL内核开发——添加内核函数 在PostgreSQL内核的学习过程中,可以尝试向内核中添加一些函数,扩展PostgreSQL的功能。同时可以增加自己对PG内核的理解。这里我们以简单的添加一个helloworld函数为例,分析一下这个过程中涉及到的相关源码。 阅读详情

  记得多年前我有一定编程经验后,开始接触postgresql内核开发时,实现了一些功能,但是却不知道怎么运行起来测试看看自己所写代码的效果,当时很捉急。。。本文将以最简单快速的方法,用几行代码在数据内核中加上一个可以看的见摸的着的小功能, 推开这扇通过内核的门。

  学习编程第一课,往往是写一个helloworld程序, 对postgresql内核编程来说,我们也可以来一把helloworld。

  打开pgsql工程,打开src\include\catalog\pg_proc.h,在里面增加两行代码:

DATA(insert OID = 9999 (helloworld  PGNSP PGUID 12 1 0 0 0 f f f f t f i s 0 0 25 "" _null_ _null_ _null_ _null_ _null_ my_func _null_ _null_ _null_));
DESCR("helloworld");

增加位置为随意,比如说可放在 下面代码的后面,注意格式和上面保持一致。

DATA(insert OID = 3444


  再打开 src\backend\utils\adt\pseudotypes.c 文件,在最后加上一个函数,如下:

Datum my_func(PG_FUNCTION_ARGS)
{
char *str = pstrdup("Hello ,Postgres World!");
PG_RETURN_TEXT_P(cstring_to_text(str));
}

  

  OK,helloworld功能全部代码完成,下面就来看效果吧。

  关闭visual stdio中的pgsql工程(可直接关vs),在vs2013 x64命令提示符中清理、编译、安装、重新初始化数据库,并启动数据库,再用psql连接数据库,这个步骤有点多,但没办法,内核已经变了,必须用最新编译的才行。具体来说在msvc路径下执行如下语句: 

clean.bat 

perl build.pl DEBUG

perl install e:\pgdb\

cd /d e:\pgdb\bin

initdb.exe -D ../data1

"pg_ctl" -D "../data1" -l logfile start

再另开一个cmd窗口,进入bin目录运行psql连接数据库

cd /d e:\pgdb\bin

psql -d postgres

注意,第一步的clean.bat一定要运行,防止之前编译的东西有影响,先清理。若对编译过程有疑问可再看下第一篇源码编译安装详细介绍。

通过psql连接上数据库后,执行如下语句: select  helloworld(); 结果如下图所示,我们的helloworld已经成功嵌入内核中。



  是不是很简单?当然可能有人心中有十万个为什么想问,别急,这是HelloWorld, 在后续的博文将持续介绍。




PostgreSQL架构解析:从开源内核到国产数据库的自主可控之路 关系型数据库作为企业数据存储的核心组件,其架构设计与扩展机制直接影响系统的稳定性与可维护性。PostgreSQL以其模块化设计和扩展优先的哲学,通过清晰的层次结构(前端解析器、查询优化器、执行引擎、存储系统)提供了强大的定制能力。这种架构允许开发者在不修改核心代码的情况下,通过扩展机制添加新的数据类型、索引方法和存储引擎,为数据库的二次开发奠定了技术基础。在国产化与自主可控的背景下,基于PostgreSQL进行深度定制成为主流技术路径之一。开发团队可以通过协议兼容、源码分支增强、存储引擎插件化等不同模式,在 阅读详情

相关推荐

Linux开发工具链构建指南:从场景化选型到实战配置

在软件开发领域,工具链的构建与优化是提升工程效率的核心环节。其基本原理是根据开发场景、技术栈和团队协作需求,模块化地选择和组合工具,形成高效的工作流。这一实践的技术价值在于,它能够显著降低环境配置成本、提升开发与调试效率,并保障项目的一致性与可维护性。无论是进行后端服务、前端应用还是系统级开发,合理的工具链都能帮助开发者聚焦于核心业务逻辑。本文以Linux平台为例,深入探讨了如何围绕编辑器、编译器、调试器等核心组件,结合现代构建系统和容器化技术,构建一套顺手的开发环境。文中特别融入了对Vim模态编辑和GDB

weixin_33858336的博客 296

postgresql-存储过程

创建一个自定义的 PL/pgSQL 函数,可以使用 CREATE FUNCTION 语句AS $$DECLAREBEGINstatements;...END;$$CREATE 表示创建函数,OR REPLACE 表示替换函数定义;name 是函数名;括号内是参数,多个参数使用逗号分隔;argmode 可以是 IN(输入)、OUT(输出)、INOUT(输入输出)或者 VARIADIC(数量可变),默认为 IN;argname 是参数名称;argtype 是参数的类型;

Java_Fly1的博客 3977

WSL Container实战指南:Windows原生运行Linux容器的完整教程

容器技术通过操作系统级别的虚拟化实现应用隔离,其核心原理是利用命名空间和控制组等Linux内核特性。这种技术为开发部署带来了环境一致性、资源隔离和快速启动等价值,广泛应用于微服务架构、持续集成和开发测试等场景。WSL Container作为Windows Subsystem for Linux 2的内置功能,提供了在Windows上原生运行Linux容器的轻量级方案,特别适合Django等Web应用的本地开发和测试。通过wslc.exe命令行工具,开发者可以构建镜像、管理容器生命周期,并与VS Code深度

weixin_34293246的博客 444

PLSQL\存储过程入门程序之HELLO WORLD

PLSQL入门程序输出hello world

feiyuxc的博客 2299

桌面Agent本地部署实战:框架、多模型协同与OS适配

桌面Agent是一种运行于本地操作系统、不依赖云端API、具备感知-交互-执行能力的智能体,其核心在于本地化推理、多模型协同调度与跨平台稳定部署。技术原理涵盖事件驱动框架、微服务编排、智能体调度器及OS深度集成四类架构,决定响应延迟、扩展性与隐私保障。关键价值在于数据不出设备、低延迟交互与私有知识闭环,广泛应用于办公自动化、设计提效、代码辅助与行政文档处理等场景。本文聚焦真实可跑的19款方案,结合Windows/macOS/Linux实测,详解框架选型、多模型路由桥接、CUDA/Metal适配及system

weixin_30745553的博客 382

计算机本科生如何从零开始做项目:选题、技术栈与实战指南

在计算机科学领域,理论学习与实践应用之间往往存在断层。理解软件工程的核心原理,是将离散知识转化为解决实际问题能力的关键。通过项目实践,开发者不仅能巩固数据结构、算法、操作系统等基础概念,更能掌握从需求分析到部署上线的完整工程流程,从而构建个人技术体系。对于在校学生或初学者而言,选择合适的技术栈(如Spring Boot、Vue.js、MySQL)并完成一个完整的项目,是迈向合格工程师的重要一步。本文聚焦于如何克服起步心理障碍,获取项目灵感,并拆解了如个人博客系统等常见项目的开发全流程,同时针对开发中可能遇到

weixin_30700977的博客 390

给 PostgreSQL 内核源码增加参数

最近一个工作,需要给PG增加一个参数,作为删除输入字符串中 \0 的开关,研究了一下怎么给内核增加参数。 其实如果不深究PG内核参数的整个体系架构,增加参数一点也不难,下面记录一下之前的工作(写给自己看,细节不再详述): 1. 在你自己维护的PG模块的c文件里增加一个全局变量,这个变量就是用来存储参数值的。 例如,我在postgres.c里增加了变量: /* GUC variable for removing '\0' in bind text string*/ bool bind_t...

howard_shooter的博客 1345

多维聚合实战:从SQL GROUP BY到OLAP立方体的工程化落地

多维聚合是现代数据分析的核心能力,本质是支持在多个业务维度(如时间、地域、产品)上自由切片、钻取与交叉比较的动态聚合机制。其技术原理源于OLAP立方体模型,依赖维度建模、度量定义与事实表组织,通过预计算与实时计算协同实现高性能响应。相比传统GROUP BY的静态降维,多维聚合提供可交互、可复现、可扩展的分析骨架,广泛应用于BI仪表盘、自助分析平台与实时决策系统。本文聚焦多维聚合的数据操作实践,涵盖CUBE/ROLLUP高级SQL、Pandas链式groupby、维度建模规范及ClickHouse/Doris

weixin_30693683的博客 386

PostgreSQL内核开发过程介绍(五)- 语句分析之原始解析树

postgres

数据库耕耘者 347

企业级AI编程私有化部署实战指南

AI编程工具正从通用代码补全演进为具备上下文理解与领域推理能力的智能编码Agent,其核心价值在于将企业私有知识、代码规范与业务逻辑深度融入生成过程。实现这一能力的前提是真正可控的私有化部署——不仅要求网络隔离与离线运行,更需保障数据主权闭环、治理可审计及领域知识可注入。当前市场中大量标称‘支持私有化’的工具在L2数据层(如向量索引托管)或L3治理层(如遥测不可关闭)存在硬伤,导致等保三级、GDPR合规与法务红线难以满足。本文聚焦AI编程、私有化部署两大热词,结合金融、制造、医疗等真实行业场景,解析如何通过

weixin_34208283的博客 352

PyQt5 + HFSS:给你的仿真脚本做个专属GUI界面(零基础搭建指南)

本文详细介绍了如何使用PyQt5为HFSS仿真脚本创建专属GUI界面,适合零基础用户快速上手。通过Python二次开发,实现参数可视化调整、进度实时监控等功能,大幅提升团队协作效率。文章涵盖环境配置、界面设计、HFSS集成到打包部署的全流程,是仿真工程师提升工作效率的实用指南。

weixin_42535720的博客 186

[pgrx开发postgresql数据库扩展]3.hello world全流程解析

一般来说,数据库的扩展开发主要有的目的就是扩展数据库引擎的能力(不管是用pgrx还是其他的框架都一样):例如PostgreSQL上最著名的扩展PostGIS,就是扩展了PG数据库的空间数据支持能力,目前PostGIS已经成了使用最广泛的开源空间数据库扩展。如果要扩展数据库的能力,那么一般来说需要以下两种能力:——题外话:有同学看到这里,可能会说:数据库本来就是一个系统里面压力最大的部分,在架构设计的时候都巴不得把所有的功能都从数据库上挪走,以减轻数据库的压力,你这样做,不是反其道而行之么?常见高并发系统里面

1219

使用STM32制作简易数字时钟

连接LED数码管的电源和地线到STM32单片机的对应引脚,将数码管的A、B、C、D引脚连接到STM32单片机的I/O口引脚。通过编写和调试这个项目,可以熟悉STM32单片机的GPIO口和定时器的使用,以及数字显示的控制。步骤六:测试和调试 通过观察数码管的显示,可以验证时钟功能是否正常工作。步骤四:编写代码 在主程序中,我们将使用定时器中断来控制时钟的运行,并使用GPIO口控制LED数码管的显示。步骤五:编译和下载 编译代码并下载到STM32单片机中,通过调试器和串口监视器进行调试和查看输出结果。

qq_67153941的博客 1303

从Jeff Dean时代到云原生与AI工程化:开发者技能栈的范式转移

软件工程正经历从个人英雄主义到系统化工程的深刻范式转移。这一转变的核心驱动力在于,随着分布式系统、微服务架构和人工智能的普及,工程的主要矛盾已从构建单一高性能系统,转向如何规模化、可靠地协同管理海量组件。云原生技术通过容器化、声明式API和服务网格等抽象,将基础设施复杂度封装,使开发者能聚焦于业务逻辑。与此同时,AI工程化将机器学习模型的开发、部署和监控流程标准化,使其成为生产系统中可管理的一等公民。这两大支柱共同定义了现代软件工程的新基座,要求开发者从深度优先的专家思维,转向具备系统设计、自动化运维和跨领

weixin_34008784的博客 340

训练YOLOv11 | Pytorch和Pycharm的安装教程适用W11系统(附详细的系统变量添加过程)

根据你之前下载的版本选择对应的选项即可,然后复制底下的绿色代码到Anaconda的命令行输入即可(这里要在你安装的python环境里进行安装,例如我的环境名字是PyTorch,那么就是activate PyTorch里进行安装)然后同之前一样会加载一会,然后会询问我们是否下载配件,我们输入Y等待即可(下载过程中我们要确保网络通常如果有波动可能会下载失败)。类似于我的电脑是Windows11选择上面红框内的选项即可点击后即下载,(注意这里下载的是zip文件)下载完成后复制下面几个文件。

Snu77的博客 1万+

MIKE水动力笔记8_冷启动与热启动

在【MIKE水动力笔记5_建立水动力模型】中,讲到【Step 2 设置模型参数】中的【Initial Conditions】时,提到了冷启动与热启动。本博文就详细讲解何为冷启动、热启动,并通过一个案例具体分析两者不同。...

晏长街的博客 6569

Docker 学习:术语、使用、Compose、Swarm

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

freeking101的博客 6170

DRV8711驱动器的各寄存器的介绍

drv8711驱动器

PCLintelligence的博客 1636

OpenClaw Docker Compose 完整部署教程:AI Agent 基础设施落地实践

AI Agent 是当前企业智能化升级的核心载体,其本质是可编排、可执行、可扩展的自动化工作流引擎。OpenClaw 作为轻量级开源 AI Agent 框架,依托 LLM 推理能力与 Skill 插件机制,实现数据库查询、文档解析、API 调用等真实任务闭环。其部署并非单容器运行,而是典型的多服务协同架构——需 MySQL 存储技能元数据、Redis 缓存会话状态、MinIO 托管文件资源,并通过 docker-compose 实现依赖编排与健康就绪控制。本教程聚焦生产就绪的完整链路,覆盖 Ubuntu 系

ama7449的博客 477

HyperLynx仿真(一)LineSim简单介绍

可以选择设置信号线与信号线之间默认的距离和信号线与同平面的平面之间的距离,这些设置根据工程师项目上经常使用的情况而设置,也可以选择不设置,在每次仿真时根据需要再对每一个仿真单独设置。仿真属性的设置对话框包含一般设置、 显示颜色设置、LineSim 设置、BoardSim 设置、 层叠默认设置、焊盘类型设置、仿真示波器默认设置、电路仿真器默认设置、电源完整性设置及高级设置。第一次使用HyperLynx软件时需要设置仿真相关环境,包括仿真软件的基本设置、模型库路径设置、仿真控制器控制、单位等。...

小幽余生不加糖 8955

基于STM32L4XX的环境光传感器(AS7343-DLGMN)应用程序设计

define AS7343_STATUS_SPECTRAL_INT (1 << 3) /* 光谱数据就绪 */#define AS7343_SYS_CFG_SPECTRAL_EN (1 << 1) /* 光谱测量使能 */#define AS7343_SYS_CFG_ALS_EN (1 << 0) /* ALS使能 */#define AS7343_SYS_CFG_INT_EN (1 << 4) /* 中断使能 *//* 切换通道组 (0=组1 F1-F6, 1=组2 F7-F12) */

myron6688的博客 258

TCP与UDP协议深度解析:从原理到实战选型指南

网络传输层协议是构建互联网通信的基石,其核心在于如何在不可靠的IP网络上实现数据的可靠或高效传输。TCP协议通过连接管理、序列号、确认应答和重传机制构建了可靠的字节流传输通道,确保数据完整有序,适用于网页浏览、文件传输等对准确性要求极高的场景。UDP协议则采用无连接的报文传输模式,牺牲可靠性以换取极低的延迟和协议开销,成为实时音视频、在线游戏等低延迟应用的首选。理解这两种协议的本质差异,对于开发者进行技术选型至关重要。本文将通过代码示例和典型应用场景对比,帮助你掌握在connection refused、p

anjichan4261的博客 407

第一节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门

vben5 快速入门。 Vben Admin 框架新出的版本V5.5.4,而之前的Vben Admin 2.x 目前已存档,仅进行重大问题修复。之前在2.x版本曾经简单完成了一版专栏文章,当时也是收获了一些好评和建议。本次决定在v5 版本基础上再完成一次前后端的搭建。希望大家继续多多支持。项目精简后,再次启动项目,执行 pnpm run dev点击登录,可以看到接口报错,现在前端请求的后端有报错,下一节处理这部分逻辑。

cuiwin的专栏 7082

DevOps记录

目录 CI/CD Docker & Kubernetes Docker开发 + 阿里云容器镜像服务 Kubernetes Kubernetes Dashboard Ansible Ansible Tower Terraform

保持初心 保持好奇 1769

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

SAP B1中文培訓教材_SDK

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

架构设计的核心:抽象能力到底在抽象什么?

在软件架构中,抽象能力是决定系统质量的关键软技能。它并非玄学,而是有章可循的工程实践:通过分层抽象、接口抽象和模型抽象,将系统按职责纵向切分、用稳定契约隔离变化、对业务世界深度建模。抽象的核心在于识别稳定与变化的边界,让易变的部分可插拔,让稳定的部分成为骨架。从TCP/IP协议栈到微服务架构,抽象能力贯穿始终。掌握从名词动词中提炼实体与行为、用最小闭环验证模型、用刻意训练提升抽象水平,能够帮助架构师设计出高内聚低耦合的系统。本文结合实战案例,剖析过度抽象、层次混乱等常见陷阱,并提供可落地的架构设计自查清单,

weixin_31412781的博客 235

android 蓝牙通讯demo

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

Qt 5.14.2在aarch64平台静态交叉编译实践:工具链配置与部署全解析

在嵌入式Linux开发中,交叉编译与静态链接是解决目标平台动态库依赖问题的两大核心手段。交叉编译通过专用的aarch64-linux-gnu-g++工具链,让x86主机生成ARM64可执行文件;静态链接则将Qt库和第三方依赖全部封装进单一二进制,从根本上消除目标板缺失.so文件、platform plugin无法加载等运行故障。Qt 5.14.2作为LTS版本,提供了成熟的跨平台配置机制,通过调整configure参数,可裁剪无用模块、内置png/jpeg/freetype等依赖,实现轻量级静态构建。这一方

weixin_33913332的博客 484

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

上一篇: postgresql源码阅读快速上手
下一篇: postgresql内核开发之 SYSDATE实现
postgres20
博客等级 码龄10年 100粉丝 25原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值