POSTGRESQL 初体验

一 POSTGRESQL

目录

[一 POSTGRESQL](#一 POSTGRESQL)

1.简介

2.特点

3.优势

4.架构

5.应用场景

6.结论

[二 安装 postgresql](#二 安装 postgresql)

(1)关闭selinux防火墙

(2)安装编译依赖包

(3)解压源码包

[3.1 切换目录](#3.1 切换目录)

[(4) 配置环境变量](#(4) 配置环境变量)

(5)登录数据库

[2. DNF 安装](#2. DNF 安装)

1.安装postgresql

2.初始化

3.登录数据库

[三 POstgresql 结构](#三 POstgresql 结构)

1.PG的逻辑结构

2.PG的物理结构

(1)软件安装目录

(2)数据库目录结构

[(3)数据库有两个基础的对象 一个是oid.,一个是表空间](#(3)数据库有两个基础的对象 一个是oid.,一个是表空间)

[(4)base 的物理布局设计](#(4)base 的物理布局设计)

(5)表空间跟数据库关系


一 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的丰富数据类型和高级特性使得它能够灵活应对各种复 杂的业务场景。无论是处理结构化数据还是非结构化数据,PostgreSQL都能提 供强大的支持。 |
| 社区支持:PostgreSQL拥有一个活跃的开发者社区和丰富的生态系统。社区 中不仅有大量的教程、文档和插件可供使用,还有众多经验丰富的开发者愿意分 享经验和解答问题。 |
| 成本效益:作为开源软件,PostgreSQL降低了企业的成本投入。同时,其卓 越的性能和广泛的应用场景也使得PostgreSQL成为了许多企业的首选数据库产 品。 |

4.架构

PostgreSQL的架构设计体现了其高性能和可扩展性的特点。在逻辑层面上,PostgreSQL 包含了数据库集群、表空间、数据库、Schema、表、索引等结构;在物理层面上,则包括数据文件、日志文件、参数文件、控制文件等物理存储方式。其中,数据块(Page)作为数据读写的基本单位,在PostgreSQL中扮演着至关重要的角色。通过优化数据块的读写效率和布局方式,PostgreSQL能够进一步提高其性能表现。

5.应用场景

PostgreSQL广泛应用于各种业务场景中,包括但不限于以下方面:

|------------------------------------------------------------------------------------|
| 企业应用:如ERP、CRM、HRM等系统,需要处理复杂的事务和查询操作。 PostgreSQL 凭借其高性能和事务处理能力,能够为企业应用提供稳定可靠的数 据支持。 |
| 数据分析:在数据仓库和商业智能领域,PostgreSQL凭借其丰富的数据类型 和高级查询特性,能够轻松应对大规模数据分析和挖掘任务。 |
| Web 应用:对于需要高并发访问和实时数据处理的Web应用来说,PostgreSQL 的MVCC机制和扩展性特性使得其成为了一个理想的选择。 |
| 地理信息系统(GIS):通过PostGIS扩展,PostgreSQL能够支持地理空间 数据的存储和分析功能,为GIS应用提供了强大的数据支持。 |
| 物联网与大数据:随着物联网和大数据技术的不断发展,PostgreSQL 凭借其 高性能、可扩展性和丰富的数据类型特性,在物联网和大数据领域中也得到了广 泛的应用。 |

6.结论

综上所述,PostgreSQL作为一款功能强大、开源的数据库管理系统,在现代信息化建设中发挥着越来越重要的作用。其丰富的特性、卓越的性能、灵活的应用场景以及强大的社区支持使得PostgreSQL成为了众多企业和开发者的首选数据库产品。随着技术的不断进步和应用的不断扩展,相信PostgreSQL将在未来

二 安装 postgresql

1.编译安装

(1)关闭selinux防火墙

复制代码
setenforce 0
systemctl stop firewalld

(2)安装编译依赖包

复制代码
dnf -y install gcc libicu libicu-devel readline-devel zlib zlib-devel

(3)解压源码包

复制代码
tar zxvf postgresq1-16.3. tar. gz

3.1 切换目录

复制代码
cd postgresq1-16.3

指定安装目录

复制代码
./configure -- prefix=/usr/local/pgsql

编译安装

复制代码
make && make install

以及配置环境创建用户

复制代码
adduser  postgres

在创建数据存储目录

复制代码
mkdir /usr/local/pgdql/data

添加数据存储用户目录归属

复制代码
chown -R postgres /usr/local/pgsql/data

(4) 配置环境变量

复制代码
vim /etc/profile
export LD_LIBRARY_PATH=/usr/local/pgsql/lib
export PATH=$PATH:/usr/local/pgsq1/bin

在刷新环境变量

复制代码
source /etc/profile

(5)登录数据库

注意:不要使用root用户登录,切换到postgres这个用户

切换用户

复制代码
su - postgres

在初始化

复制代码
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

/usr/local/pgsql/bin/pg_ctl  -D /usr/local/pgsql/data -l logfile start

初始化完成在进入数据库

复制代码
psql

2. DNF 安装

1.安装postgresql

复制代码
dnf -y install postgresql-server

2.初始化

复制代码
postgresql-setup --initdb

3.登录数据库

复制代码
psql

su - postgres

三 POstgresql 结构

1.PG的逻辑结构

PG采用了多层逻辑结构:第一层为实例,第二层为数据库(每个实例下可有多个相互独立的数据库),第三层为Schema(每个数据库下包含多个Schema)。每个Schema下可以创建表、视图、索引、函数等数据库对象。如下图所示

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| >Database cluster(数据库集簇):由postgresql server管理的数据库的 集合,下面由多个database组成。一个数据库集簇可以包含多个Database、多 个User,每个Database以及Database中的所有对象都有它们的所有者:User。 |
| > Database 数据库:Postgres 默认数据库、Template0 最精简模板、Template1 默认模板;数据库本身也是数据库对象,并且在逻辑上彼此分离。存储 schema 的 一个逻辑空间,对应在物理层面上也是一个目录。 |
| >Schema:一个数据库可以有多个User用户,多个Schema模式,默认创建一个数据库会存储在默认表空间,它包含一个Public名称的Schema模式(拷贝自 Template1模板)。它可隔离多个用户之间相同名称的对象。一个数据库可以有 多个Schema模式,他们互不相关互相隔离。实际存储数据库对象的逻辑空间-> 逻辑上的对象编号,schema是依附于数据库而存在的。 |
| >User用户:postgres用户是默认创建的超级管理员;每个数据库都有一个 OWNER用户,每个用户可以OWNER多个数据库。 数据库对象:这里包含了table,index,view,序列,函数等,数据最终存储 在表中。表的组成表由多个page[block]组成)一个page包含(页头信息空 闲空间 Tuple),实际存储数据的区域->对应到物理层面上就是文件 -- >page 构成 |
| > tablespace:存储数据库的一个逻辑空间,可以存放不同的数据库 -- >对应 在物理层面上是一个目录 |
| 个数据库会存储在默认表空间,它包含一个Public名称的Schema模式(拷贝自 Template1模板)。它可隔离多个用户之间相同名称的对象。一个数据库可以有 多个Schema模式,他们互不相关互相隔离。实际存储数据库对象的逻辑空间-> 逻辑上的对象编号,schema是依附于数据库而存在的。 >User用户:postgres用户是默认创建的超级管理员;每个数据库都有一个 OWNER用户,每个用户可以OWNER多个数据库。 数据库对象:这里包含了table,index,view,序列,函数等,数据最终存储 在表中。表的组成表由多个page[block]组成)一个page包含(页头信息空 闲空间 Tuple),实际存储数据的区域->对应到物理层面上就是文件 -- >page 构成 > tablespace:存储数据库的一个逻辑空间,可以存放不同的数据库 -- >对应 在物理层面上是一个目录 OID:所有数据库对象都有各自的oid(object identifiers),oid是一个无符 号的四字节整数,相关对象的oid都存放在相关的system catalog表中,比如 数据库的oid和表的oid分别存放在pg_database,pg_class表中。 |

2.PG的物理结构

数据库的文件默认保存在initdb时创建的数据目录中。在数据目录中有很多类型、功能不同的目录和文件,除了数据文件之外,还有参数文件、控制文件、数据库运行日志及预写日志等。本质上都是PG的相关一些文件

(1)软件安装目录

PostgreSQL 数据库的软件目录通常是在/usr 目录下(也可自定义位置),使用pg_confg命令可以看当前数据库的基本情况,也可以在环境变量中可以看到。最直接可以使用which命令看到,最直接可以使用which命令看到

安装目录里的基本内容如下

复制代码
which  psql

cd /usr/local/pgsql

ll

其中各个目录里的内容及用途:

|----------------------------------------------------|
| >bin:二进制可执行文件,是PG数据库的所有相关命令所在,为方便使用需 设置到环境变量中 |
| >lib:动态库目录,PostgreSQL运行所需要的动态库都在此目录下 |
| > share:放有文档和配置模板文件,一些拓展插件的SQL文件在此目录下的 extension中 |
| >data:目录是数据库集群的物理存储核心,包含用户数据、元数据和配置文件 |
| >include:目录则提供编译扩展和客户端程序所需的C语言头文件。 |

(2)数据库目录结构

|------------------------|------------------------|
| /usr/local/pgsql/data/ | -- 数据目录 |
| base | -- 表和索引文件存放目录 |
| global | -- 影响全局的系统表存放目录 |
| pg_commit_ts | -- 事务提交时间戳数据存放目录 |
| pg_dynshmem | -- 被动态共享所使用的文件存放目录 |
| pg_logical | -- 用于逻辑复制的状态数据 |
| pg_multixact | -- 多事务状态的数据 |
| pg_notify | -- LISTEN/NOTIFY 状态的数据 |
| pg_replslot | -- 复制槽数据存放目录 |
| pg_serial | -- 已提交的可序列化信息存放目录 |
| pg_snapshots | -- 快照 |
| pg_stat | -- 统计信息 |
| pg_stat_tmp | -- 统计信息子系统临时文件 |
| pg_subtrans | -- 子事务状态数据 |
| pg_tblspc | -- 表空间 |
| pg_twophase | -- 预备事务状态文件 |
| pg_wal | -- 事务日志(预写日志) |
| pg_xact | -- 日志提交状态的数据存放目录 |

文件和目录相关作用描述

|---------------------------------|-----------------------------------------------------|
| file | description |
| pg_version | 包含postgresql主版本号的文件 |
| pg_hba.conf | 控制postgresql客户端验证的文件 控制PG客户端认证文件 主机 数据库 用户ip地址 认证方式 |
| pg_ident.conf | 控制postgresql用户名映射的文件,配置操作系统用户和数据库服务器上的用户映射 |
| postgresql.conf | 配置参数文件 |
| postgresql.auto.conf | 用于存储在ALTER SYSTEM(版本9.4或更高版本)中设置的配置参数的文件 |
| postmaster.opts | 记录服务端上一次启动的命令行选项 |
| subdirectories | description |
| base/ | 包含每个数据库子目录的子目录 |
| global/ | 包含群集范围表的子目录,例如pg_database和pg_control |
| pg_commit_ts/ | 包含事务提交时间戳数据的子目录。9.5版本以后 |
| pg_clog/ (Version9.6or earlier) | 包含事务提交状态数据的子目录。它在版本10中重命名为pg_xact.CLOG将在5.4章节 中详解。 |
| pg_dynshmem/ | 包含动态共享内存子系统使用的文件的子目录。9.4版本以后 |
| pg_logical/ | 包含逻辑解码的状态数据的子目录。9.4版本以后 |
| pg_multixact/ | 包含多事务状态数据的子目录(用于shared row locks) |
| pg_notify/ | 包含LISTEN/NOTIFY状态数据的子目录 |
| pg_repslot/ | 包含复制槽数据的子目录(9.1版本以后) |
| pg_serial/ | 包含有关已提交的序列化事务(9.1版本以后)信息的子目录 |

|-----------------------------------|------------------------------------------------------------------|
| pg_snapshots/ | 包含导出快照的子目录(9.2版本以后)PostgreSQL的函数pg_export_snapshot在此子目录中创建快照信息文件 |
| pg_stat/ | 包含统计子系统永久文件的子目录 |
| pg_stat_tmp/ | 包含统计子系统临时文件的子目录 |
| pg_subtrans/ | 包含子事物状态数据的子目录 |
| pg_tblspc/ | 表空间符号链接目录 |
| pg_twophase/ | 包含prepare事务的状态文件 |
| pg_wal/ (Version 10 or later) | 包含WAL(Write Ahead Logging)段文件的子目录。在版本10中从pg_xlog重命名 而来. |
| pg_xact/ (Version 10 o r later) | 包含事务提交状态数据的子目录。在版本10中从pg_clog重命名而来.CLOG将在5.4章 节中详解 |
| pg_xlog/ (Version 9.6 or earlier) | 包含WAL(Write Ahead Logging)段文件的子目录。在版本10中重命名为pg_ |

(3)数据库有两个基础的对象 一个是oid.,一个是表空间

OID(Object Identifier)是数据库对象的唯一标识符。

表空间实际上是文件系统中的一个位置链接,即一个目录,它是一个逻辑上的概念,目录是它的物理存在方式。数据库中创建的对象(表、索引、数据库对象)都保存在表空间中。postgresql初始化完成后,会有两个默认的表空间,一个是pg_default,如果用户建表时没有指定表空间,所有新建的表都会放在pg_default中,另一个是pg_global,存放的是整个实例数据库所共享的系统表。

(4)base 的物理布局设计

每个数据库都会在$PGDATA/base下面生成一个子目录,如下图,都会一一对应

复制代码
ls /usr/local/pgsq1/data/base/

postgres=# select datname, oid from pg_database;

(5)表空间跟数据库关系

在Oracle数据库中;一个表空间只属于一个数据库使用;而一个数据库可以拥有多个表空间。属于"一对多"的关系

在PostgreSQL集群中;一个表空间可以让多个数据库使用;而一个数据库可以使用多个表空间。属于"多对多"的关系

系统自带表空间:

表空间pg_default是用来存储系统目录对象、用户表、用户表index、和临时表、临时表index、内部临时表的默认空间。对应存储目录$PADATA/base/

表空间pg_global用来存放系统字典表;对应存储目录$PADATA/global/

相关推荐
小陈工3 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
科技小花7 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸7 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain7 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希8 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神8 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员8 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java8 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿8 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴9 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存