PostgreSQL 数据读取到共享缓冲区
在这篇文章中,我们将深入探讨 PostgreSQL 如何将磁盘上的数据文件读入到共享缓冲区中。 调试方法(可选) 如果你希望跟踪代码执行过程,可以使用以下调试方法:启动一个 SQL 终端(如 psql),执行 SELECT pg_backend_pid(); 获取当前后端进程的 PID,然后通过 gdb attach 到该进程。调试过程中可能会收到 SIGUSR1 和 SIGUSR2 信...
在这篇文章中,我们将深入探讨 PostgreSQL 如何将磁盘上的数据文件读入到共享缓冲区中。 调试方法(可选) 如果你希望跟踪代码执行过程,可以使用以下调试方法:启动一个 SQL 终端(如 psql),执行 SELECT pg_backend_pid(); 获取当前后端进程的 PID,然后通过 gdb attach 到该进程。调试过程中可能会收到 SIGUSR1 和 SIGUSR2 信...
PostgreSQL 中有一个配置参数 shared_buffers,它控制着数据库将使用多少内存来缓存从磁盘读取的数据块。本文我们将深入分析共享缓冲区的初始化过程。 //src/backend/storage/ipc/ipci.c void CreateSharedMemoryAndSemaphores(void) 首先,我们来看 CreateSharedMemoryAndSemap...
DataType 的转换与实现 今天我们继续分析 types/mod.rs 文件,重点关注 DataType 与其他类型之间的转换逻辑,以及相关的错误处理。 1. 从 sqlparser::DataType 到自定义 DataType 为了将 SQL 解析器(sqlparser)的 AST 节点无缝转换为 RisingLight 内部的 DataType,我们为 DataType 实现...
RisingLight 学习:DataType 的实现方法分析 在上一节中,我们了解了 DataType 枚举的定义,它构成了 RisingLight 数据类型系统的基础。本节我们将深入分析 DataType 的实现方法,这些方法为类型系统提供了丰富的功能支持。 方法实现分析 以下是 DataType 中定义的关键方法: impl DataType { pub const f...
RisingLight 学习:数据类型系统概览 在上一节中,我们对 RisingLight 的整体架构有了初步了解。从本节开始,我们将深入代码细节,首先从数据库的核心——数据类型系统入手。 所有与数据类型相关的实现都位于 src/types 目录下,其中包含了 blob.rs、date.rs 等多个模块,分别定义了各种具体的数据类型。 今天,我们首先分析 src/types/mod.r...
在上一节中,我们探讨了 RisingLight 如何利用 sqlparser 实现 SQL 解析功能。现在,为了更好地组织代码,我们将此功能封装为一个独立的子模块,并将其命名为 parser。此命名旨在明确其作为数据库执行 SQL 语句首个阶段(解析)的核心作用。 // Copyright 2024 RisingLight Project Authors. Licensed under A...
RisingLight 是一个专为教学目的设计的分析型数据库,采用 Rust 语言编写。 今天,我们将聚焦于其 parser(解析器)部分。在数据库处理一条 SQL 语句时,SQL 解析是执行流程中的第一个关键步骤。在 RisingLight 中,解析器的核心职责是将输入的 SQL 语句转化为抽象语法树(Abstract Syntax Tree, 简称 AST),为后续的查询优化和执行奠定...
在上一篇文章中,我们创建了一个空白窗口,没有展示任何内容。今天,我们将在这个窗口中显示一个“HelloWorld”。 通过上一篇文章的介绍,我们了解到需要实现一个 Render 的 Trait 才能绘制内容。 我们先给出完整的代码,随后逐步解析: use gpui::{ App, Application, Bounds, Context, SharedString, Windo...
最近打算开始将学过的 Rust 语言使用起来,就选择了 GPUI 这一个 GUI 的框架,然后使用 gpui-compoent 这个库来提供组件,目的是为了实现一个类似于 DBeaver 的数据库客户端的工具,先从支持 PostgreSQL 开始,今天我们现在学习如何去创建一个窗口; 因为目前 GPUI 和 gpui-compoent 都没有正式的 crate,因此我们只能通过 git ...
在 SQLITE3 数据库的实现过程中会使用日志来实现 ACID 的功能。当然也可以使用 WAL 来实现。在这里我们讲述使用日志来实现 ACID.