当前位置: 首页 > news >正文

Learning PostgresSQL读书笔记: 第1章 Introduction to PostgreSQL

PostgreSQL (以下简称PG)号称 the most advanced open-source database in the world。
在这里插入图片描述

吸引用户的是其企业级特性:稳定,安全,可扩展性。

PG 是开源关系型数据库。开源意味着其属于任何人,任何人都可以对其作出贡献。同时,倒闭的风险极低。

PGDG(PostgreSQL Global Development Group)是官方的PG开发人员。PGDG 每年发布一次新的生产版本,通常在每年的最后一个季度。目前最新版本是17(这本书是针对16版本的,但基本概念通用)。

技术要求

本书示例代码。

PostgreSQL 概览

一个PG实例可包括多个数据库,单表最大32TB,最多1600列。

PL/PgSQL支持过程和函数,即可重用的代码。

PostgreSQL 可以使用其他嵌入式语言进行扩展,例如 Perl、Python、Java 甚至 Bash!

可通过Extension增强数据库功能。

PG支持的操作系统和平台参见这里。

在邮件列表存档中搜索问题和解决方案是一个好习惯,访问这里了解更多信息

PostgreSQL 简史

完整的简史可以参看文章:The History of PostgreSQL Open-Source Development

PostgreSQL 的前身是Ingres,从其项目名称POSTGRES (POST-Ingres) 即可看出。虽然项目是1986年启动,但书中认为PG的诞生是在1996年。

$ git log 'git rev-list --max-parents=0 HEAD'
commit d31084e9d1118b25fd16580d9d8c2924b5740dffAuthor: Marc G. Fournier <scrappy@hub.org>Date:   Tue Jul 9 06:22:35 1996 +0000Postgres95 1.01 Distribution - Virgin Sources

在这里插入图片描述
右边两位华人即伯克利的学生:Andrew Yu 和 Jolly Chen。这个图实际是拼的。
在这里插入图片描述

PostgreSQL 16 有哪些新功能?

参考Release Notes。

PostgreSQL 发布策略、版本号和生命周期

PG的版本号格式为major.minormajor每年发布一次,16,17都是9月发布的。minor通常包括错误修复和安全修补等。详细规则见这里。

major版本间可能不兼容,minor版本间是兼容的。

PG建议安装最新版本。

major的生命周期是5年,到期后不再更新。所以升级、安全补丁和错误修复都没了,同时也得不到支持。

PostgreSQL 术语探索

完整的术语可参考网页。
基本术语可参考文档。

PG作为守护进程在OS上运行。运行的守护进程称为instance,一个instance可包括多个database,因此instance也称为database_cluster。数据库内的命名空间称为schema。一个对象的完整层级为:server.database_cluster.database.schema.object

user是在database_cluster一级定义的,因此可以操作cluster中任何数据库。

PostgreSQL 的内部数据(例如用户、数据库、命名空间、配置和数据库运行时状态)通过catalog提供:catalog(也称为information schema)是一种特殊的表和视图。不同用户可能看到信息不一样,但超级用户通常可以看到全部信息。

PG 将用户数据(例如表)及其内部状态存储在本地文件系统上。PG依赖底层文件系统来实现持久化,因此调优文件系统性能至关重要。PG 将其所有内容(数据,日志和配置)存储在目录PGDATA 中。

日志即WAL(Write-Ahead Logs)。和Oracle的redo log类似,WAL在修改数据前先持久化日志。

PG启动时,第一个进程是postmaster,当有用户连接时,postmaster会fork一个backend process来一对一的处理。

安装 PostgreSQL

OS平台首选Linux。

安装 PostgreSQL 有两种方式:

  1. 从源代码编译(最新)
  2. 使用二进制包(最简单,最快)

安装组件

  • server
  • client
  • contrib(扩展和实用程序)
  • docs
  • PL/Perl, PL/Python 和 PL/Tcl(server中的编程语言)

建议至少安装前三个。

从二进制包安装 PostgreSQL

OS厂商和PGDG都会提供Linux二进制包。建议用PGDG的,例如红帽家族。

使用本书的 Docker 镜像

在本书Github项目的docker-images目录下。

在 GNU/Linux Debian、Ubuntu 及其衍生版本上安装 PostgreSQL
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get -y install postgresql
# 开机启动 PostgreSQL
$ sudo update-rc.d postgresql enable
$ sudo service postgresql start
在 Fedora Linux 上安装 PostgreSQL
$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/F-38-x86_64/pgdg-fedora-repo-latest.noarch.rpm
$ sudo dnf install -y postgresql16-server postgresql16
$ sudo systemctl edit postgresql-16
$ sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
$ sudo systemctl enable postgresql-16
$ sudo systemctl start postgresql-16.service
或
$ sudo service postgresql-16 start
在 FreeBSD 上安装 PostgreSQL

略。

从源代码安装 PostgreSQL

$ wget https://ftp.postgresql.org/pub/source/v16.0/postgresql-16.0.tar.bz2
$ wget https://ftp.postgresql.org/pub/source/v16.0/postgresql-16.0.tar.bz2.md5
$ md5sum --check postgresql-16.0.tar.bz2.md5
$ tar xjvf postgresql-16.0.tar.bz2
$ cd postgresql-16.0
$ ./configure --prefix=/usr/local
$ make && sudo make install
$ sudo useradd postgres
$ sudo mkdir -p /postgres/16/data
$ sudo chown -R postgres:postgres /postgres/16
$ /usr/local/bin/initdb -D /postgres/16/data

通过 pgenv 安装 PostgreSQL

pgenv 是一款精巧的非官方小工具,并非针对生产环境,而是让开发人员和 DBA 能够轻松尝试不同版本的 PostgreSQL 并控制它们的工具。

总结

本章介绍了PG的简史,基本术语和安装。

相关文章:

  • 【AI 测试】测试用例设计:人工智能语言大模型性能测试用例设计
  • 【数码管向左出现与消失滚动“456789Ab”】2022-4-25
  • 【数据结构】_二叉树OJ第二弹(返回数组的遍历专题)
  • 如何利用Charles抓包工具提升API调试与性能优化
  • 【Java面试】什么是一致性Hash算法
  • 原生微信小程序网络请求与上传接口封装实战指南
  • 黑马程序员苍穹外卖DAY1
  • Java 程序设计试题​
  • 拼多多API限流机制破解:分布式IP池搭建与流量伪装方案
  • 从 0 到 1 构建 Graph RAG 系统:本地图谱 + 通义千问落地实践
  • OVS Faucet练习(下)
  • matlab实现大地电磁二维正演
  • 吃透 Golang 基础:测试
  • C++语言发展历程-2025
  • Python实例题:基于区块链的去中心化应用平台(区块链、智能合约)
  • 京东金融API支付链路剖析:白条分期接口的安全加固方案
  • STM32对接霍尔传感器
  • 技术逐梦之旅:从C语言到Vue的成长之路
  • Java底层原理:深入理解JVM内存管理机制
  • 如何在 Python 中连接 Elasticsearch 并使用 Qwen3 来实现 RAG
  • 西安网站建设价格/微信小程序怎么开通
  • 暗红色网站/如何做网站
  • 做云教育集群网站/seo裤子的关键词首页排名有哪些
  • 做网站的公司前三名/网站seo服务商
  • 南京英文网站建设/不需要验证码的广告平台
  • 网站建设 手机和pc/搜索引擎推广实训