《PG就业之路》- 第一章:体系架构概述

xiaobu 5天前 42

PostgreSQL,简称PG,是著名的开源数据库软件,它具有悠久的历史,良好的设计和高质量的源代码。全球范围内不少的公司都以PG为内核,开发出各具特色的数据库软件产品,譬如华为的openGauss,阿里的PolarDB PostgreSQL版,美国EDB公司的Advanced Server,俄罗斯PostgreSQL Professional公司的PostgreSQL Pro等等。也有不少大学的计算机相关专业以PG为教学案例和技术原型,传授和研究数据库相关的理论和具体实现。

学习任何一个新东西,第一件事情就是要对它有个整体印象,所以我们在第一章自然要介绍PG的体系架构。但在此之前,当务之急是手头上有个可以做各种实验的学习环境,所以我们在第一节要先了解如何搭建PG的学习实验环境。学习开源软件的技术,如果不去阅读源代码,以求理解其背后的技术秘密,就辜负了“开源”两个字,所以本章只讲解如何从源代码开始安装PG软件,且在后续的学习中我们坚持既学习PG的外在功能,又探究其背后源代码的具体实现,其目的就是努力让读者做到“知其然且知其所以然”。

本书的全部实验都是在Linux 环境下进行的,因此要求读者具备一定的Linux 使用经验,且为了能够理解 PG的源代码,读者还需要具备初步的C语言编程的能力。如果你不具备这两个领域的基本能力,也不要担心,因为本书需要的Linux和C语言的知识非常少:对于Linux的操作,只要求掌握ps、ls、pwd 和vi 等常用的命令。对于C语言部分,只要求知道十六进制和二进制、十进制之间的转换,理解结构体(struct) 和指针 (pointer) 的基本使用等。在互联网上,关于Linux和C语言的优秀的学习文档和教学视频已经非常丰富了,而且很多都是免费的。你可以利用这些学习资料快速学习。如果你足够勤奋,只需恶补一个星期左右,你所掌握的Linux基本操作和C语言编程的知识就足够应付本书的学习。

在本书开始写作时,PG的最新版本是18,所以本书的内容以PG 18作为基本的学习版本。可能你在阅读本书时PG又发布了新版本,但本书绝大部分的内容都是讨论PG内核稳定的功能,和PG的版本关系不大。

最新回复 (2)
  • xiaobu 4天前
    引用 2

    创建实验环境


    在讲解如何从源码开始安装PG之前,我假定你有一台可以使用的Linux 服务器,且使用的用户是postgres。你可以通过多种方式获得一台自主可控的Linux服务器,譬如:你可以使用VMWare/VirtualBox等优秀的虚拟机软件,在本机上创建一台Linux服务器。很多云服务商都提供免费使用的Linux服务器来招揽潜在的用户,我的很多实验就是利用AWS免费使用EC2虚拟机一年的优惠条款薅亚马逊公司的羊毛。我全部的实验环境就是使用Ubuntu 24.04的多台EC2,其整体如图1.1 所示。

    你也可以使用Windows电脑支持的WSL(Windows Subsystem for Linux)作为基本的运行环境。关于如何安装Linux 环境,在互联网上你可以轻易地找到非常多的优秀且免费的学习资料,在此我就不重复了。本书全部的PG实验和Linux发行版本基本上没有关系,你可以选择任何自己喜欢的Linux 发行版本,都能够顺利地完成本书的各种实验。

  • xiaobu 4天前
    引用 3

    编译PG源代码和安装软件


    我使用的是一台运行Ununtu 24.04的Linux服务器,为了编译PG源码,我需要提前把一些编译PG源代码所需要的软件包安装好,下面是我使用root用户运行的安装命令。注意:你需要以一个具有sudo权限的用户先执行“sudo su -”命令切换到root用户后,再运行这些命令。

    apt update -y
    apt upgrade -y
    apt install apt-file -y
    apt-file update -y
    apt install bzip2 build-essential pkg-config -y
    apt install libicu-dev flex bison -y
    apt install libreadline-dev zlib1g-dev -y
    apt install docbook-xml docbook-xsl -y
    apt install libxml2-utils xsltproc fop -y
    

    完成上述软件安装后,你切换到postgres用户,检查一下gcc和gmake是否安装成功,因为这些编译工具是编译PG源码所必须的。具体执行的命令和相关的输出内容如下:

    postgres$ gcc --version
    gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0
    Copyright (C) 2023 Free Software Foundation, Inc.
    ......
    
    postgres$ gmake --version
    GNU Make 4.3
    Built for x86_64-pc-linux-gnu
    Copyright (C) 1988-2020 Free Software Foundation, Inc.
    ......

    如果你的环境中出现类似“command not found”的错误,就说明gcc或者gmake没有安装好,你需要先解决这个问题, 再进行下面的安装步骤。

    下一步的任务是下载并解压缩PG的源码压缩包。我们访问PG的官方网站( www.postgresql.org ),很容易找到下载(download) 的入口,注意要选择下载源码包,而不是 已经编译好的二进制软件包。例如我下载了文件postgresql-18.0.tar.bz2 或者postgresql-18.0.tar.gz,它们都是PG 18的源码包,只不过是压缩的格式不同而已。如果你使用一台可以联网的Linux服务器,可以直接在这台服务器上使用wget或者curl等常用的Linux下载工具下载PG的源码。请看下面的示例:

    wget https://ftp.postgresql.org/pub/source/v18/postgresql-18.0.tar.bz2
    curl -O https://ftp.postgresql.org/pub/source/v18/postgresql-18.0.tar.bz2

    下载命令wget或者curl只要使用一个即可。假设我们以postgres用户执行上述下载命令,压缩包在/home/postgres目录下,我们可以执行如下命令进行解压缩:

    postgres $ id
    uid=1001(postgres) gid=1001(postgres) groups=1001(postgres),100(users),113(ssl-cert)
    postgres $ pwd
    /home/postgres
    postgres $ ls -l
    total 21796
    -rw-rw-r-- 1 postgres postgres 22319023 Aug  5 17:15 postgresql-18.0.tar.bz2
    postgres $ tar jxvf postgresql-18.0.tar.bz2 
    postgres $ ls -l
    total 21800
    drwxrwxr-x 7 postgres postgres     4096 Jul 14 20:12 postgresql-18.0
    -rw-rw-r-- 1 postgres postgres 22319023 Aug  5 17:15 postgresql-18.0.tar.bz2
    postgres@ip-172-31-29-179:~$ cd postgresql-18beta2/
    postgres@ip-172-31-29-179:~/postgresql-18beta2$ 
    
    

    我们看到有一个目录,这个就是源码压缩包解压缩后的全部源代码。下面我们就要进入到源代码目录,执行源代码的编译和软件安装的任务。在这个目录下,执行如下命令:

    ./configure --prefix=/home/postgres/pg18b2
    make world
    make install-world

    其中第一步是配置,我们仅仅指定了prefix参数的值,它规定了编译好的PG软件会放在哪个目录中,我们在上面指定了/home/postgres/pg18b2这个目录。第二步的make world就是对一百多万行的PG源码进行编译,这一步耗时最长。第三步的make install-world命令就是把编译好的软件拷贝到你指定的目录,即/home/postgres/pg18b2这个目录。

    如果你所有的操作都很顺利,就会看到最终的成果,如下所示:

    postgres@ip-172-31-29-179:~$ pwd
    /home/postgres
    postgres@ip-172-31-29-179:~$ ls -l
    total 21804
    drwxrwxr-x 6 postgres postgres     4096 Aug  5 17:28 pg18b2
    drwxrwxr-x 7 postgres postgres     4096 Aug  5 17:20 postgresql-18beta2
    -rw-rw-r-- 1 postgres postgres 22319023 Aug  5 17:15 postgresql-18beta2.tar.bz2
    postgres@ip-172-31-29-179:~$ ls -l pg18b2/
    total 16
    drwxrwxr-x 2 postgres postgres 4096 Aug  5 17:28 bin
    drwxrwxr-x 6 postgres postgres 4096 Aug  5 17:28 include
    drwxrwxr-x 4 postgres postgres 4096 Aug  5 17:28 lib
    drwxrwxr-x 8 postgres postgres 4096 Aug  5 17:28 share
返回
发新帖