postgresql源码阅读快速上手

postgreSQL源码分析综述 2021SC@SDUSC 目录综合分析安装过程主要源码分工情况我的任务分析方式 综合分析 经过小组讨论和分析,大家一致认为postgreSQL的核心部分在于对SQL功能的实现。而postgreSQL的核心代码则在于其后端的完成实现。 由上图,可以看出postgresql处理查询请求(核心功能)都是依托postgres这个进程完成的。而查询请求处理的流程为:解析SQL语句->分析处理->语句重写->查询优化->执行计划。所以,源码的核心部分也就在这个流程中。 安装过程 在官网上下载源 阅读详情

    前一篇(win10 源码编译安装postgresql数据库)介绍了windows下pg源码编译安装方法,那么装好之后从哪开始阅读学习pg源码?本文将介绍一种快速上手方法。

   在进行源码编译时,务必编译成调式版(即执行perl build.pl DEBUG),便于调试学习。然后安装,运行,通过psql连接数据库,当然也可以通过pgAmin客户端连接,这里只介绍psql, 连接成功如下图:


     对于一个有源码未知程序,如何快速掌握理解代码呢?当然是看运行堆栈,调试跟踪运行流程,掌握内部逻辑,理解各个函数功能。那么对于上百万行代码的pg源码,又从何处快速切入呢?请继续向下看。

    在上面的psql连接窗口中执行 select pg_backend_pid(); 查询到当前服务pg后台进程,如我的是3956


通过vs2013打开pg代码工程:进入编译后的postgresql代码最上层目录,找到pgsql.sln 双击打开或先开vs2013在vs2013中,打开成功后会看到如下图:


依次点击最上面菜单栏中“调试”->“附加到进程”,在打开的窗口进找到上面查到的进程ID 3596 附加到当前工程(小技巧:按p可以快速定位到p开头的所有进程,找到ID为上面查到的那个)。附加成功后Visual Stdio 编译器左上角会显示“ pgsql(正在运行)”,如下图所示:


此时说明附加进程成功,那么一个可调试的pg环境就运行起来了,接下来就看怎么切入了。

可能大家会好奇,现在的pg是处于一种什么状态呢?结合前面的psql客户端来看,显然是正在等我们sql语句指令状态,在代码中又是怎么描述的呢?点击菜单栏中“调试”->“全部中断”(或者快捷键 Ctrl+Alt+Break),中断当前程序,如下图:


pg的代码风格很好,函数名差不多都能望文生义,一个个堆栈看下来基本能看出就是在等网络消息的状态,最终就停在WaitForMultipleObjects这个函数这了。当然如果在pg某个语句运行中也能通过“调试”->“全部中断”方式停下来,查看堆栈是否正常,如果语句运行太快了可以把数据量搞大点,这样就有时间做中断。

     上面说的是运行中中断,实际使用中这样的操作场景可能比较少,更多的往往是出错情况下,想深究错误原因需要调试下。比方说执行某个语句,没有得出想要的结果,报错了,给出的错误信息不满意,或者说就是要看下执行流程,需要研究下代码,如何下手?下断点!当然,要在合适的地方下断点。pg内核报错接口已经封装好,只要在报错函数那下断点,所有错误都能断到,断到之后再看代码执行流程就很容易了,错误入口函数有这两个

errmsg(const char *fmt,...)

elog_finish(int elevel, const char *fmt,...)

找到这两个两个函数分别下断点,就能断到所有的内核报错信息,下面举个简单例子:

select *from txx;   --txx表不存在,会报错,我们看堆栈


如图,在errmsg处被断到了,这里的堆栈我简单解释下,不做深入,以后再逐步展开,有兴趣者可以自己看代码,或找相关书籍深入研究。

main,相信每个写过代码的人都了解。

SubPostmasterMain,pg是一个多进程结构的数据库,这里会产生子进程。

BackendRun ,后台运行设置一些参数信息

PostgresMain,数据库主函数,从某种意义上说这是数据库的开始运行的地方

exec_simple_query ,执行一个Q报文协议语句

pg_analyze_and_rewrite,查询分析和重写

parse_analyze,语义分析

transformTopLevelStmt,解析树转查询树

transformStmt,同上,分类开始转

transformSelectStmt,转换一个select解析树(上一步已经分类到select类型语句)

transformFromClause,处理select中的from子句

transformFromClauseItem,处理from子句中每个项,from子句可以有多个项,如from t1,t2,t3多个表

transformTableEntry,转换具体表,如t1

addRangeTableEntry,同上

parserOpenTable,打开表,打开时发现表找不到,报错

errmsg,报错

这里是一个简单的报错用例,实际上还可能会有查询优化,查询执行等相关执行过程,暂不深入,本文只是告诉大家如何最简单快速的上手pg代码。

对于errmsg和elog_finish这两个报错接口的区别,大家可能有些疑问,我稍微介绍下。在代码中,errmsg被包成了ereport函数使用,elog_finish被包成了elog函数使用,对于ERROR级别的错误,ereport报的错是正常的错误,而elog报的错则是不正常的的错误。那么正常的错误,不正常的错误是什么意思?就拿上面的例子来说,我查一个表,这个表不存在,这就是正常的错误,但是如果一个值,按照设计只可能有三种值,比方说switch case1 case2 case3分别对应处理了,然后为了程序健壮性我们对其它所情况都报错,就应该用elog报,因为这是正常情况下不应该出现的错误,很可能是一个未初始化的值引发的。举个通俗点的例子,打篮球时别人进攻我防守不小心打手了,这犯规了,这种犯规就是正常的错误(用ereport),但是别人投球时我突然把篮筐扯掉不让人进,这肯定也犯规了,但这是非正常犯规,规则中没办法定义但的确又犯规(用elog)。

OK,本篇就这到,以后再出写一篇专门介绍postgresql在windows下调试的文章,希望能对大家有所帮助。



【0000】PostgreSQL V17.4 内核源码剖析专栏(2017 ~ 2025.11.28 更新) 本专栏将会持续更新,直到将PostgreSQL V13.2源码涉及的所有原理、技术剖析完成为止。每一篇文章都是经过多次的源码阅读 + 调试,得以验证之后才梳理成文章形式。最终该专栏的文章数量应该在一万篇或以下,这也是文章序号从【0000】开始的缘故。通过本专栏的学习,能够让你掌握PostgreSQL数据库中的每个技术背后,底层的实现原理。 阅读详情

相关推荐

VS2008环境下PostgreSQL-9.2.1源码调试教程

PostgreSQL的源码目录结构设计得十分清晰,其根目录包含了多个子目录,每个子目录都承担着特定的角色和职责。下面是一些核心目录的简要概述:src:包含了所有的源代码文件,是整个项目的核心。include:包含了供源代码使用的头文件。interface:包含了PostgreSQL提供给其他程序使用的接口定义。doc:文档目录,包含有关PostgreSQL的官方文档。contrib:包含了用户贡献的模块和扩展,这些通常不是PostgreSQL核心部分,但提供了额外功能。

weixin_42153793的博客 370

PostgreSQL源码学习笔记(3)-进程结构

文章目录引言(Introduction)进程结构Postmaster守护进程初始化内存上下文注册信号处理函数配置参数创建监听套接字辅助进程启动装载客户端认证文件循环等待客户连接请求辅助进程SysLogger系统日志进程BgWriter后台写进程WalWriter预写式日志写进程PgArch预写式日志归档进程AutoVacuum系统自动清理进程PgStat统计数据收集进程Postgres服务进程DML执行流程参考资料(References) 引言(Introduction) 经过前面initdb初始化数据集簇

爱敲键盘的吉他手 1080

从零开始:手把手教你用Verilog搭建一个可配置的Cache模块(以Vortex GPGPU为例)

本文详细介绍了如何使用Verilog从零开始搭建一个可配置的Cache模块,以Vortex GPGPU为例。内容涵盖Cache设计基础、模块接口与参数化设计、核心子模块实现、仲裁与一致性机制、功能验证与性能调优等关键环节,适合RTL设计初学者和希望深入理解Cache工作原理的工程师。通过实战指南,读者可以掌握硬件代码分析技巧,提升Cache模块的设计能力。

weixin_42552315的博客 441

PostgreSQL源码分析:postgres.c阅读笔记

本文主要围绕postgres.c中的入口函数PostgresMain展开,对两种通信子协议(简单查询协议和扩展查询协议)及相关函数(exec_simple_query、exec_parse_message、exec_bind_message、exec_describe_statement_message、exec_describe_portal_message、exec_execute_message和finish_xact_command)做了进一步介绍。

fufufunny的博客 3411

视觉SLAM十四讲--第13讲 实践:设计SLAM系统(最详细的代码调试运行步骤)

最详细的代码调试运行避坑说明,也包含了我自己对代码的理解,如有理解错误的地方,欢迎指正交流。

记录和分享 1万+

BambuStudio学习笔记:GCode 类

关键成员解析 核心配置组件 状态跟踪系统 功能模块集成 核心方法剖析 主输出管道 实现多阶段处理: 分层处理流程: 实现智能路径规划: 关键特性: 实现模板故障检测: 采用三级流水线: 支持扩展类型: 实现多通道输出: 采用: 实现: 支持: 支持模块化编译: 典型流程: 实现功能:

zzzkk2009的专栏 938

postgresql源码学习整理

最近在学习postgresql源码,观看cuichao1900的转载文章,写的非常好,但是顺序是乱的,所以在这里整理一下

vivian_hus的博客 2574

LabVIEW通过ActiveX控件实现与三菱FX5U PLC的高效数据交互

本文详细介绍了如何利用LabVIEW的ActiveX控件,通过三菱官方MX Component工具包实现与FX5U PLC的高效数据交互。文章从环境配置、控件插入到实战代码解析,系统讲解了连接建立、数据读写及资源释放的全流程,并提供了关键的避坑指南,帮助工程师快速构建稳定可靠的上位机通讯系统。

weixin_29197051的博客 376

利用 GDB 快速阅读 postgresql 的内核代码

gdb 快速阅读 postgresql 内核源代码

天行健,地势坤 3062

电源完整性之Cadence Sigrity Power SI_AC阻抗仿真

之前和大家分享过电源完整性之仿真设计原理链接: [link](https://blog.youkuaiyun.com/weixin_41808082/article/details/117065140?spm=1001.2014.3001.5501).今天接着上一篇文章总结一下电源AC阻抗的的仿真操作流程及一些simulation中的设置参数,用到的时候Cadence Sigrity 中的Power SI组件,下面开始享受仿真的快乐吧: 1.仿真模式选择与文件导入 选择Cadence Sigrity下的Power SI

刘小同学的博客 1万+

C#与数据采集卡集成开发全指南:从硬件连接到实时数据处理(附工业传感器监测实战)

C#数据采集卡集成开发指南 本文系统介绍了不同类型数据采集卡(DAQ卡)与C#的集成方法。主要内容包括: 数据采集卡分类:按接口分为PCIe/PCI(高带宽低延迟)、USB(便携即插即用)和以太网(远距离组网);按信号类型分为模拟量输入、数字量输入/输出等。 C#集成核心方法: 优先使用厂商SDK(如NI DAQmx),提供完整功能封装 无SDK时采用通用协议(如USB HID、Modbus TCP) 具体实现示例: NI DAQmx采集热电偶温度代码 USB HID协议读取模拟量电压值 工业应用要点:实时

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1975

5 分钟快速上手 pgrust:Rust 版 PostgreSQL 零基础入门指南

pgrust 是一个用 Rust 语言从零重写 PostgreSQL 的开源数据库项目,目标是实现与 PostgreSQL 18.3 的完全兼容。它已经通过了超过 46000 条官方回归测试,并且做到了磁盘级兼容:可以直接启动已有的 PostgreSQL 数据目录。更令人兴奋的是,它在事务型负载上比原生 PostgreSQL 快约 50%,分析型负载最快可达原生版本的 300 倍。这份 Rust

gitblog_00641的博客 1078

Luma AI技术浅析(一)

是一款基于人工智能的3D内容生成平台,旨在通过深度学习技术实现高效、高质量的3D场景、物体和动画的生成。Luma AI 主要利用了等技术,以实现从图像、视频到3D模型的转换和生成。

m0_75253143的博客 1733

5分钟快速上手pgvector:为PostgreSQL注入AI向量搜索超能力

还在为AI应用中的向量数据存储和搜索发愁吗?pgvector正是你需要的解决方案!这个开源扩展让PostgreSQL数据库瞬间拥有处理向量数据的超能力,让你在熟悉的SQL环境中轻松实现向量相似性搜索。无论你是想构建智能推荐系统、实现语义搜索,还是进行图像内容检索,pgvector都能让你的PostgreSQL如虎添翼! ## 🎯 pgvector的核心价值:让AI向量搜索变得简单 想象一下,

gitblog_00330的博客 1032

【GlobalMapper精品教程】084:tif(tfw)、jpg(jgw)、png(pgw)的区别与联系

摘要:本文介绍了TFW、JGW、PGW等地理参考文件的基本原理和应用。这些文件通过简单的文本格式存储栅格图像的地理坐标信息,适用于平面坐标系下的GIS数据处理。文章详细说明了文件各行的含义,并提供了在ArcGIS和Globalmapper中生成这些文件的具体操作步骤,包括导出TIFF、JPG、PNG格式时勾选生成对应坐标文件的选项。这些文件虽然简单易用,但仅适用于平面坐标系,且功能相对有限。配套视频教程提供了更详细的操作演示。

智慧空间实验室 2404

android 蓝牙通讯demo

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

5步快速部署pgvector:PostgreSQL向量搜索扩展终极指南

你是否正在寻找一个简单高效的向量数据库扩展,让你的PostgreSQL具备AI时代必备的向量搜索能力?pgvector正是你需要的PostgreSQL插件!这个开源向量数据库扩展让PostgreSQL从传统的关系型数据库华丽转身,成为支持向量相似性搜索的强大工具。 想象一下,你的应用程序需要处理海量文本、图像或音频的嵌入向量,传统的关键词搜索已经无法满足精准匹配的需求。pgvector向量数据库

gitblog_00130的博客 908

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

PostgreSql源码阅读笔记10(参考husthxd在ITPUB的博客)

参考内容 PostgreSQL 源码解读(181)- 查询#97(聚合函数#2-ExecInitAgg) 主要做三件事: 分配slot并标记类型 标记聚合函数用的列 为每个scan阶段标记聚合函数并优化 聚合过程会有一个优化:聚合函数之间可能有可共享的情况: 共享聚合函数:比如Sum(x)函数对同一列出现两次(下图红色部分) 共享聚合中间参数:比如AVG和平方差函数一起出现,平方差用到了av...

qq_37517281的博客 340

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

PostgreSQL学习的九层宝塔

活动预告:在即将到来的2019 数据技术嘉年华大会上,来自 PostgreSQL 方面的主题同样丰富多彩,既有来自云厂商的数据库研发成果,新版本新特性介绍,还有来自于用户的最佳实践。 这些主题包括来自 华为智能数据与存储领域总裁周跃峰,阿里巴巴以及PostgreSQL社区首席布道师的周正中(德哥),华为GaussDB生态与标准CTO王伟民,PostgreSQL社区核心成员张文...

Enmotech的博客 1553

pg_query_go源码深度解析:从CGO绑定到PostgreSQL解析器的完整实现

你是否曾想过如何在Go应用中直接解析PostgreSQL SQL查询,获得与PostgreSQL服务器完全一致的解析树?pg_query_go正是这样一个强大的Go语言库,它通过CGO技术将PostgreSQL的查询解析器完整地集成到Go生态中。本文将深入解析这个项目的实现原理,带你了解从CGO绑定到完整PostgreSQL解析器的技术实现细节。🔍 ## 📊 项目架构概览:三层设计模型 p

gitblog_00204的博客 674

如何看注解的源码_源码剖析一定要看的一篇文章——如何做源码剖析?

本文约定了一套优秀的源码流程图绘制规范,并以PostgreSQL的建表流程举例,由于保守公司业务和技术机密以及出于方便考虑,选择了PostgreSQL最基本的建表流程来举例,没有涉及更复杂的技术。 源码剖析的三大利器有:1、源码阅读器(Source Insight、Jetbrains套装等);2、函数调用流程剖析;3、思维导图。规范源码剖析流程图绘制规范1、 细线箭头表...

weixin_39633774的博客 367

Ubuntu22.04 安装 PostgreSQL 9.3.2

万物皆在一切之中。——阿那克萨戈拉 《亚里士多德〈物理学〉注释》古人说,“纸上得来终觉浅,绝知此事要躬行。”在阅读源码的同时,如果不自己尝试去跑一跑源码的话,怎又知自己真正读懂了呢?这篇文章讲提供一个最简单的能够上手的教程,旨在给大家提供一个更快速的环境部署方案。如果对你有用的话可以点一个小心心~安装系统的过程就不废话了。这里用的是Ubuntu22.04,当然你也可用其他的操作系统,不过,如果用的不是ubuntu系的话,你可能要替换掉一些命令了,比如apt之类的。

linghies的博客 1990

如何使用Feedbin打造个人专属阅读空间:完整入门指南

Feedbin是一款优雅的开源网络阅读工具,让你能够轻松聚合、管理和阅读各类网络内容。无论你是博客爱好者、新闻追踪者还是内容创作者,Feedbin都能帮助你构建一个整洁、高效的个人阅读中心。 ## 📋 Feedbin核心功能概览 Feedbin提供了现代化阅读体验所需的全部功能,包括: - **多源内容聚合**:支持订阅博客、新闻网站、YouTube频道等多种内容源 - **智能分类管理*

gitblog_00980的博客 892

宝塔需提前安装postgresql_谈PostgreSQL的学习之九层宝塔

武侠世界,9是个神奇的数字,武学秘籍有 《九阳真经》 《九阴真经》,凡武功修炼到第九层,闯荡江湖将独孤求败,快意恩仇。以文昌塔为喻,我把学习PG划分九层,希望可以对玩转数据江湖的同学,有所参照,逐层递进,直至达到高手行列,闯荡职场,游刃有余。第一层 初识PG,开阔心胸。第二层 安装使用,动手操练。第三层 熟悉功能,提纲挈领。第四层 熟练操作,得心应手。第五层 透视功能,探究原理。第六层 问题处理,...

weixin_39867125的博客 482

2026 年最值得关注的开源数据库:pgrust 用 Rust 重写 PostgreSQL

数据库圈正在迎来一场激动人心的变革。**pgrust** 是一个用 **Rust 重写 PostgreSQL** 的开源数据库项目,目标直指 Postgres 18.3 的完整兼容。官方数据显示,其新一代版本在事务负载上比 PostgreSQL 快约 50%,在分析型负载上快约 300 倍,甚至有望在 ClickBench 基准上反超 ClickHouse。无论你是数据库工程师、后端开发者,还是单

gitblog_01083的博客 1140

pgrust 快速入门:用 psql 连接并执行你的第一条 SQL 查询

想要体验"比 Postgres 更快的 Postgres"?这份 **pgrust 快速入门** 教程将带你零基础起步:如何用 **psql** 连接 pgrust 服务器,并执行你的 **第一条 SQL 查询**。pgrust 是一个用 Rust 重写 PostgreSQL 的开源项目,目标兼容 Postgres 18.3,已通过 46,000+ 条回归查询验证,磁盘格式与原生 Postgres

gitblog_01070的博客 674
上一篇: win10 源码编译安装postgresql数据库
下一篇: postgresql内核开发之HelloWorld入门
postgres20
博客等级 码龄10年 100粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值