目录
一:PostgreSQL
1.简介
PostgreSQL,作为一个功能强大且开源的对象关系型数据库管理系统(ORDBMS),自其诞生以来,便以其卓越的性能和丰富的特性赢得了全球开发者和企业的青睐。源自加利福尼亚大学伯克利分校的PostgreSQL,不仅继承了其前身Ingres的精髓,更在不断的发展中推陈出新,成为了现代数据库领域的佼佼者。
2.特点
> 开源与自由:PostgreSQL完全开源,遵循PostgreSQL许可证,这一特性使得用户可以自由地使用、修改和分发PostgreSQL,无需担心版权问题,同时也促进了全球开发者的积极参与和贡献。
> 标准符合性:PostgreSQL高度符合SQL标准,支持复杂的查询请语法、子查询窗口函数、公共表表达式(CTE)等高级特性,使得开发者可以更加灵活地编写高效、易读的SQL代码。
> 数据类型丰富:PostgreSQL提供了丰富的数据类型,包括基本类型(如整数、浮点数、字符串等)、日期和时间类型、数组、枚举、范围类型、JSON、地理空间类型等,这些类型极大地扩展了PostgreSQL的应用范围,使其能够处理各种复杂的数据场景。
> 事务与并发:PostgreSQL采用多版本并发控制(MVCC)机制,确保了在高并发环境下的数据一致性和隔离性。同时,PostgreSQL还支持复杂的事务处理,包括嵌套事务、保存点等,为开发者提供了强大的事务管理能力
> 扩展性:PostgreSQL支持扩展和插件机制,允许用户根据需要定义新的数据类型、函数、操作符、索引方法等。这一特性使得PostgreSQL能够不断适应新的业务需求和技术发展。
> 安全性:PostgreSQL提供了细粒度的访问控制、加密传输、审计日志等安全特性,确保了数据库的安全性和数据的保密性。
3.优势
> 高性能:PostgreSQL通过优化查询计划、支持并行查询、分区表等特性,提供了卓越的性能表现。即使在处理大规模数据和高并发访问时,也能保持高效的响应速度。
> 高可用性:PostgreSQL支持主从复制、流复制和逻辑复制等多种复制方式,使得数据库系统能够轻松实现高可用性和容灾备份。在发生主故障时,能够快速恢复服务,确保业务的连续性。
> 灵活性:PostgreSQL的丰富数据类型和高级特性使得它能够灵活应对各种复杂的业务场景。无论是处理结构化数据还是非结构化数据,PastgreSQL都能提供强大的支持。
> 社区支持:PostgreSQL拥有一个活跃的开发者社区和丰富白的生态系统。社区中不仅有大量的教程、文档和插件可供使用,还有众多经验丰富的开发者愿意分享经验和解答问题。
> 成本效益:作为开源软件,PostgreSQL降低了企业的成本投入。同时,其卓越的性能和广泛的应用场景也使得PostgreSQL成为了许多企业的首选数据库产品。
4.架构
PostgreSQL的架构设计体现了其高性能和可扩展性的特点。在逻辑层面上,PostgreSQL包含了数据库集群、表空间、数据库、Schemaa、表、索引等结构:在物理层面上,则包括数据文件、日志文件、参数文件、控制文件等物理存储方式。
5.应用场景
PostgreSQL广泛应用于各种业务场景中,包括但不限于以下方面:
> 企业应用:如ERP、CRM、HRM等系统,需要处理复杂的事务和查询操作。PostgreSQL凭借其高性能和事务处理能力,能够为企业应用提供稳定可靠的数据支持。
> 数据分析:在数据仓库和商业智能领域,PostgreSQL凭借其丰富的数据类型和高级查询特性,能够轻松应对大规模数据分析和挖掘任务。
> Web应用:对于需要高并发访问和实时数据处理的Web应用来说,PostgreSQL的MVCC机制和扩展性特性使得其成为了一个理想的选择烊。
> 地理信息系统(GIS):通过PostGIS扩展,PostgreSQL能多支持地理空间数据的存储和分析功能,为GIS应用提供了强大的数据支持。
> 物联网与大数据:随着物联网和大数据技术的不断发展,PostgreSQL凭借其高性能、可扩展性和丰富的数据类型特性,在物联网和大数据领域中也得到了广泛的应用。
6.结论
综上所述,PostgreSQL作为一款功能强大、开源的数据库管理系统统,在现代信息化建设中发挥着越来越重要的作用。
二:安装PostgreSQL
1.编译安装
(1)安装编译安装所需环境
[root@localhost ~]# yum -y install gcc make libicu libicu-devel readline-devel zlib zlib-devel
(2)编译安装
# 解压源码包
[root@localhost ~]# tar zxvf postgresql-15.4.tar.gz
# 切换目录
[root@localhost ~]# cd postgresql-15.4
# --prefix 指定安装目录
[root@localhost ~]# ./configure --prefix=/usr/local/pgsql
# 编译以及安装
[root@localhost postgresql-16.3]#make & make install
配置环境
# 创建用户
[root@localhost~]#adduser_postgres
# 创建数据存储目录
[root@localhost~]#mkdir /usr/local/pgsql/data
# 更改数据存储目录的归属用户
[root@localhost~]#chown postgres /usr/local/pgsql/data
(3)配置环境变量
[root@localhost ~]# vim /etc/profile
# 末尾添加以下两行,并保存退出
export PATH=$PATH:/usr/local/pgsql/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pgsql/lib
# 刷新环境变量
[root@localhost ~]# source /etc/profile
(4)登录数据库
注意:不要使用root用户登录,切换到postgres这个用户
[root@localhost ~]# su - postgres
[postgres@localhost ~]$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
[postgres@localhost ~]$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
[postgres@localhost ~]$ /usr/local/pgsql/bin/psql
psql (15.4)
Type "help" for help.
postgres=#
2.Dnf安装
(1)安装PostgreSQL
[root@localhost ~]# dnf -y install -y postgresql-server
(2)初始化数据库
[root@localhost ~]# postgresql-setup --initdb
* Initializing database in '/var/lib/pgsql/data'
* Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
(3)登录数据库
注意:不要使用root用户登录。切换到postgres这个用户登录
[root@localhost ~]# su - postgres
# 如果出现以下症状,需重启一下PG
[postgres@localhost ~]$ psql
psql: 错误: 连接到套接字"/var/run/postgresql/.s.PGSQL.5432"上的服务器失败:No such file or directory
服务器是否在本地运行并接受该套接字上的连接?
[postgres@localhost ~]$ pg_ctl start
等待服务器进程启动 ....2025-03-12 14:18:52.949 CST [2739] 日志: 日志输出重定向到日志收集进程
2025-03-12 14:18:52.949 CST [2739] 提示: 后续的日志输出将出现在目录 "log"中.
完成
服务器进程已经启动
# 这样就可以了
[postgres@localhost ~]$ psql
psql (15.12)
输入 "help" 来获取帮助信息.
postgres=#
三:PostgreSQL结构
1.PG的逻辑结构
> Database cluster(数据库集箴):由postgresql server管理的数据库的集合,下面由多个database组成。一个数据库集簇可以包含多个Database、多个User,每个Database以及Database中的所有对象都有它们的所有者:User。
> Database数据库:Postgres默认数据库、Template0最精简梯模、Templatel默认模板;数据库本身也是数据库对象,并且在逻辑上彼此分离。存储schema的一个逻辑空间,对应在物理层面上也是一个目录。
> Schema:一个数据库可以有多个User用户,多个Schema模式,默认创建个数据库会存储在默认表空间,它包含一个Public名称的Scchema模式(拷贝自Templatel模板)。
> User用户:postgres用户是默认创建的超级管理员;每个数据库都有一个OWNER用户,每个用户可以OWNER多个数据库。
> 数据库对象:这里包含了table,index,view,序列,函萎数等,数据最终存储在表中。表的组成表由多个page[block]组成)一个pag包含(页头信息空闲空间Tuple),实际存储数据的区域->对应到物理层面上就是文件-->page构成
> tablespace:存储数据库的一个逻辑空间,可以存放不同的数据库-->对应在物理层面上是一个目录
> OID:所有数据库对象都有各自的oid(objectidentifiers),oid是一个无符号的四字节整数,相关对象的oid都存放在相关的system dcatalog表中,比如数据库的oid和表的oid分别存放在pg_database,pg_class表中1,
总结:
(1)从大小排列databasecluster-->databases-->schema-->objects
(2)Tablespace是数据最大的存储空间,Database是构成表空间的存储单元,pages是PostgreSQL数据库中最小的I0单元
2.PG的护理结构
(1)软件安装目录
PostgreSQL数据库的软件目录通常是在/usr目录下(也可自定义位置),使用pg_confg命令可以看到当前数据库的基本情况,也可以在环境变量中可以看到。最直接可以使用which命令看到
安装目录里的基本内容如下
[postgres@localhost ~]$ which psql
/usr/local/pgsql/bin/psql
[postgres@localhost ~]$ cd /usr/local/pgsql[postgres@localhost pgsql]$ 11
总计20
(2)数据库目录结构
通常使用环境变量PGDATA
指向数据目录的根目录。数据目录下有pg_version
文件,记录PostgreSQL 主版本号;base
目录包含每个数据库目录,以数据库的 OID 编号命名;global
目录包含整个集簇共享的全局表;pg_clog
目录包含事务提交状态数据;pg_multixact
目录包含多重事务状态数据等。
(3)数据库有两个基础的对象 一个是oid,一个是表空间
OID(ObjectIdentifier)是数据库对象的唯一标识符。
表空间实际上是文件系统中的一个位置链接,即一个目录,它是一个逻辑上的概念,目录是它的物理存在方式。
(4)base的物理布局设计
每个数据库都会在$PGDATA/base下面生成一个子目录,如下图,都会一一对应。
[root@localhost base]# ls /usr/local/pgsql/data/base/
45
postgres=# select datname,oid from pg_database;
(5)表空间跟数据库关系
在0racle数据库中;一个表空间只属于一个数据库使用;而一个数据库可以拥有多个表空间。属于"一对多"的关系
在PostgreSQL集群中;一个表空间可以让多个数据库使用;而一个数据库可以使用多个表空间。属于"多对多"的关系。
系统自带表空间:
表空间pg_default是用来存储系统目录对象、用户表、用户表index、和临时表、临时表index、内部临时表的默认空间。对应存储日录$FADATA/base/
表空间pgglobal用来存放系统字典表:对应存储目录$PADATA/global