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.minor
。major
每年发布一次,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 有两种方式:
- 从源代码编译(最新)
- 使用二进制包(最简单,最快)
安装组件
- 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的简史,基本术语和安装。