
PostgreSQL教程(1)PGSQL体系结构与安装部署
一、PostgreSQL 特性
PostgreSQL(简称 PGSQL)是一款功能强大的开源企业级关系型数据库,拥有众多高级特性,包括多版本并发控制(MVCC)、按时间点恢复(PITR)、异步复制、在线热备、读写分离、分布式架构、数据水平拆分等,广泛适用于金融、电信、政府、互联网等对高可用性和大规模并发有较高要求的场景,在全球范围内广受欢迎。
由于其开源免费的特性,成为众多国产数据库的基础版本,约90%的国产数据库都是在 PostgreSQL 基础上进行二次开发的,例如华为的 GaussDB、人大金仓的 KingBase、阿里的 PolarDB-Postgres 以及腾讯的 TDSQL-Postgres。
PostgreSQL 在架构设计上采用多进程模型,相较于 MySQL 的多线程机制,在处理复杂场景(如高并发、大量计算任务)时具有更优的性能表现。PostgreSQL 在数据类型方面,拥有比一般数据库更丰富的类型,包括数组、IP地址、JSON、XML、几何类型、复合类型等,能够满足多样化的数据存储需求。它也完全支持标准的 SQL 查询语言。在跨平台兼容性上也非常优秀,能够运行于 Linux、Windows、macOS 等多种操作系统之上,具备高度的可移植性。通过丰富的开发语言支持,提供了多种编程语言 API 接口,如 C、C++、Java、Python、Go、PHP 。
在管理工具方面,PostgreSQL 社区提供了大量免费高质量的图形化管理工具和辅助软件,如 pgAdmin 4 等,极大地提升了数据库的可视化管理体验。在安全性方面也具备完善的认证机制与访问控制策略,能够为企业提供稳定、可靠、安全的数据支撑环境。
二、PostgreSQL 体系结构
1、进程结构
PostgreSQL是一个多进程架构的数据库管理系统,服务启动后由多个进程来共同维护数据库的工作,以下是各进程的作用介绍:
· postgres:它是数据库实例启动后运行的第一个进程,也是所有进程的父进程。早期版本为PostMaster进程,现在为postgres的软连接。该进程用于控制整个实例的运行、内存分配、建立客户端连接等
· background writer:后台写进程(BgWriter),用于把共享内存中的脏页写到磁盘的进程,可以提高性能、释放内存块
· WAL Writer:预写日志进程,类似MySQL中的redo log
· CheckPoint:检查点进程,数据库发生宕机重启后以最近的检查点为参考,将未完成的事务前滚,再重放检查点之后的WAL日志,保证数据一致
· SysLogger:系统日志进程,当postgres.conf中的logging_collection参数为on时才会启动该进程,用于对日志进行管理
· PgArch:归档进程,当开启归档模式后才会存在该进程。该进程用于对WAL预写日志进行归档备份,避免早期WAL日志被循环写入而覆盖,通过归档日志可以实现将数据恢复到任一有记录的时间点
· AutoVacuum:自动清理进程,当数据库中的数据被执行删除操作后,会先标记为删除状态,当没有其他事务读这些数据时才会由AutoVacuum进行清理
· statistics collector:统计收集进程(PgStat),进行数据统计、收集工作,便于优化器做出正确的判断
2、数据结构
在PostgreSQL是最像Oralce的开源数据库。在 PGSQL 中,数据的存储结构分为逻辑存储结构和物理存储结构。
2.1 逻辑存储结构
数据库内部组织和管理数据的方式,包括数据库集群、数据库、表、索引、表空间等所有数据库对象
· 表空间(tablespace)
从逻辑上将数据库分成多个存储单元,通过表空间把逻辑上相关的数据存放在一起。在初始化数据库时,会自动创建pg_default和pg_global两个表空间。pg_default是在后面创建表时默认使用的表空间;pg_default用于存放系统表
· 模式(schema)
用于将数据库里的对象(表、索引、函数等)逻辑上组织在一起,便于控制管理。通常建议根据业务进行对象分类,不同的业务放在不同的模式下,模式之间的数据是互相隔离的(类似于MySQL中的不同database)。一个用户可以创建多个模式,而一个模式只能属于一个用户。在创建数据库时,如果没有声明模式,默认属于PUBLIC模式下。PUBLIC模式下所有用户都有CREATE和USAGE权限,所以建议创建一个自定义模式然后让模式所有者来进行授权。
· 其他对象
块、区、段和其他对象。在PostgreSQL所有的数据对象都由一个对象标识符(OID)管理。数据库的OID存储在系统表pg_database中;表、索引等数据库对象存放在系统表pg_class中
#查询库OID SELECT oid,datname FROM pg_database; #查询表OID SELECT relname, relfilenode FROM pg_class WHERE relname='mytable';
2.2 物理存储结构
PostgreSQL 存储在磁盘上的各种文件,包括数据文件、WAL 日志、配置文件、控制文件等,这些物理文件保存在指定的数据目录中(初始化时会进行指定)
· 参数文件
文件 | current_logfiles | 记录当前正在使用的日志文件 |
PG_VERSION | 记录数据库版本 | |
pg_hba.conf | 客户端认证配置文件 | |
postgresql.conf | 数据库静态配置文件 | |
pg_ident.conf | 用户映射文件 | |
postgresql.auto.conf | 存储ALTER SYSTEM修改后生成的参数 | |
postmaster.opts | 记录上次启动服务时的选项 | |
目录 | base | 每个逻辑数据库的目录,OID形式命名 |
log | 日志目录 | |
global | 数据库系统对象文件和pg_control文件 |
· 数据文件
用于存储数据,文件以OID命名。超过1G大小的文件,将自动被拆分为多个文件进行存储
#查询表OID与存放路径 select sys_relation_filepath('table_name')
· 日志文件
PostgreSQL日志分为运行日志、预写日志(重做日志)、事务日志和服务器日志
· 控制文件
记录数据库运行信息,如OID、是否为打开状态、检查点信息、预写日志位置等。控制文件默认保存路径为$PGDATA/global/pg_control目录下,该文件需要使用bin/pg_controldata工具查看
bin/pg_controldata /data
三、PostgreSQL 安装部署
PostgreSQL安装方式分为源码编码安装和YUM安装,两种安装包都可以通过官方下载地址https://www.postgresql.org/download/获取,下载的时候可以根据提示选择合适的版本
1、YUM安装PostgreSQL
安装过程简单,但是不能灵活定义一些参数
#配置yum仓库并yum安装 yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm yum install -y postgresql14-server #初始化数据库 /usr/pgsql-14/bin/postgresql-14-setup initdb #启动数据库,默认监听5432端口 systemctl enable postgresql-14 systemctl start postgresql-14
使用YUM安装后会自动创建一个拥有数据库登录权限的用户postgres。必须切换到postgres用户才能进行数据库连接,原因在于pg_hba.conf中还没有相应的配置项,后面文章会进行相关配置讲解
su - postgres psql #运行该命令进入pgsql交互界面
2、编译安装PostgreSQL
需要自行安装依赖,但是最为灵活,生产环境推荐使用
· 安装编译工具和依赖
yum install cmake gcc zlib zlib-devel gcc-c++ perl readline readline-devel ncurses-devel
· 下载PGSQL源码包
· 编译安装
安装完成后输出"PostgreSQL installation complete"代表成功
wget --no-check-certificate https://ftp.postgresql.org/pub/source/v14.6/postgresql-14.6.tar.gz
tar zxf postgresql-14.6.tar.gz
cd postgresql-14.6
./configure --prefix=/usr/local/postgersql14.6 [--without-readline] [--with-blocksize=32K]
# --without-readline 是否显示PG操作的历史命令,为了数据库安全可以取消安装
# --with-blocksize 数据库块大小,默认为8K,可以调大
make
make install
· 创建用户和数据目录
useradd pgadmin
mkdir /data/pgsql/{data,logs}
chown -R pguser. /data/pgsql
· 初始化PGSQL数据库
初始化完成后会创建template0、template1、postgres三个默认数据库,2个template数据库包含了系统的元数据表,用户后续创建数据库时都会以template1里的数据进行克隆,如果修改了template1里的信息,那新建的数据库就会继承这些设置。除此还会创建pg_default和pg_global两个表空间,pg_default存放于$pgdata/base目录,pg_global存放于$pgdata/global目录。编译完成后还会在数据目录下创建postgresql.conf和pg_hba.conf2个配置文件,这里暂时先不做配置
su - postgrels /usr/local/pgsql/bin/initdb -D /data/pgsql/data -U postgres -E UTF8 -W -X /data/pgsql/logs # -D:指定数据存放目录 # -E:指定字符集 # -W:初始化时为管理员设置密码
四、PostgreSQL 进程管理
通过pg_ctl工具对数据库进行管理,如果没有配置环境变量的话都需要通过-D选项指定数据目录
· 启动PGSQL服务
大部分情况下都使用pg_ctl工具启动数据库,该工具实际上也是postgres命令的封装
#-D指定数据目录 #-l指定日志存储路径和文件名,否则默认输出在屏幕上,也可通过配置文件进行修改 pg_ctl -D /data/pg12/data -l logfile start
· 停止PGSQL服务
有3种关闭服务的方式可以选择
smart:等所有连接中止后再关闭数据库。 如果客户端连接不终止则无法关闭数据库
fast:快速关闭数据库。如果有客户端连接都会被断开,未完成的事务将被回滚
immediate:强行关闭数据库,相当于杀死数据库进程
#停止服务 pg_ctl -D /data/pg12/data/ stop [-m fast|smart|immediate]
· 查看PGSQL运行状态
pg_ctl -D /data/pg12/data/ status
· 重新加载PGSQL
#下面两种方法都可以 pg_ctl reload; select pg_reload_conf(); #登录PGSQL后执行
猜你喜欢

PostgreSQL PostgreSQL教程(2)客户端工具psql的使用
一、命令行客户端psql 是 PostgreSQL 的命令行客户端工具,类似于MySQL中的mysql、Oracle中的sqlplus。通过psql可以实现对 PostgreSQL 数据库的...

MySQL MySQL教程(5)多表连接查询
一、MySQL 多表连接查询概述多表连接查询是指在多个表中,存在一个或多个相同的字段(这些字段的值必须一致),通过将这些字段连接起来,就能将不同表的数据整合在一起,形成一张包含所有相关信息的大表。这样...

MySQL MySQL教程(4)SQL语句介绍与数据增删改查
一、SQL语言介绍SQL是结构化查询语言的英文单词缩写,用于存取、查询、更新、管理数据库系统中的数据。SQL是关系型数据库应用语言的标准,从推出以来先后有SQL 86\89\92\99等标准,其中最重...

MySQL MySQL教程(3)MySQL 常用数据类型与约束
一、MySQL 数据类型在任何的数据库管理系统中,数据类型的选择和使用都是设计数据库架构的基础之一。它们不仅决定了存储数据的方式,还直接影响着查询效率、存储空间的利用以及数据完整性。在 MySQL 中...
MySQL MySQL教程(2)MySQL 生产环境配置文件模板及参数详解

一、MySQL配置文件路径规则MySQL对于配置文件有一个顺序规则,它是按照/etc/my.cnf > /etc/mysql/my.cnf > /usr/local/mysql/etc/m...
文章评论