安装PostgresSQL

目录

安装postgressql所需的依赖环境

编译安装

解压源码包

切换目录

--prefix指定安装目录

编译以及安装

配置环境创建用户

创建数据存储目录

更改数据存储目录的归属用户

配置环境变量

登录数据库

Dnf安装

安装postgresql

初始化数据库

登录数据库

postgresql结构

pG的逻辑结构

pG的物理结构

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

数据库目录结构

文件和目录相关作用描述

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

base的物理布局设计

表空间跟数据库的关系


安装postgressql所需的依赖环境

复制代码
[root@localhost ^]#yum -y install gcc gcc-* make libicu libicu-devel readline-devel zlib zlib-devel

编译安装

解压源码包

复制代码
[root@localhost~]# tar zxvf postgresql-16.3.tar.gz

切换目录

复制代码
[root@localhost~]#cd postgresql-16.3

--prefix指定安装目录

复制代码
[root@localhost postgresql-16.3~]#./configure --prefix=/usr/1ocal/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

配置环境变量

复制代码
[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

登录数据库

不要使用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

Dnf安装

安装postgresql

复制代码
[root@localhost]# dnf install -y postgresql-server

初始化数据库

复制代码
[root@localhost ^]# postgresql-setup --initdb
* Initializing database in '/var/lib/pgsql/data
* Initialized, logs are in /var/lib/pgsql/initdb_postgresql.1Jog

不要使用root用户登录,使用postgres用户

登录数据库

复制代码
[root@bogon]# postgres

pg_ctl start 然后再重启一下就能进去数据库了

pG的逻辑结构

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

>Database cluster(数据库集):由postgresql server管理的数据库的

集合,下面由多个database组成。一个数据库集簇可以包含多个Database、多

个User,每个Database以及Database中的所有对象都有它们的所有者:User。

Database数据库:Postgres默认数据库、Template0最精简模板、Templatel

默认模板:数据库本身也是数据库对象,并且在逻辑上彼此分离。存储schema的

一个逻辑空间,对应在物理层面上也是一个目录。Schema:

一个数据库可以有多个User用户,多个Schnema模式,默认创建一

个数据库会存储在默认表空间,它包含一个Public名称的Schema模式(拷贝自

Templatel模板)。它可隔离多个用户之间相同名称的对象。一个数据库可以有

多个Schema模式,他们互不相关互相隔离。实际存储数据库对象的逻辑空间->

逻辑上的对象编号,schema是依附于数据库而存在的。User用户:postgres用户是默认创建的超级管理员;每个数据库都有一个

OWNER用户,每个用户可以OWNER多个数据库。

数据库对象:这里包含了table,index,view,序列,函数等,数据最终存储

在表中。表的组成表由多个page[block]组成)一个page包含(页头信息空

闲空间Tuple),实际存储数据的区域->对应到物理层面上就是文件-->page

构成

tablespace:存储数据库的一个逻辑空间,可以存放不同的数据库->对应

在物理层面上是一个目录

OID:所有数据库对象都有各自的oid(objectidentifiers),oiid是一个无符

号的四字节整数,相关对象的oid都存放在相关的systemcatalog表中,比如

数据库的oid和表的oid分别存放在pg_database,pg_class表中。从大小排列databasecluster-->databases-->schemia-->objects

Tablespace是数据最大的存储空间,Database是构成表空间的存储单元,

pages是PostgreSQL数据库中最小的I0单元

postgresql结构

pG的物理结构

数据库的文件默认保存在initdb时创建的数据目录中。在E数据目录中有很

多类型、功能不同的目录和文件,除了数据文件之外,还有参数文件、控制文件、

数据库运行日志及预写日志等。本质上都是PG的相关一些文件

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

复制代码
[postgres@localhost ^]$ which psql
/usr/local/pgsql/bin/psql
[postgres@localhost ^]$ cd /usr/local/pgsq]
[postgres@localhost pgsql]$ ll

各个目录及用途

bin:二进制可执行文件,是PG数据库的所有相关命令所在,为方便使用需

设置到环境变量中lib:动态库目录,PostgreSQL运行所需要的动态库都在正此目录下

share:放有文档和配置模板文件,一些拓展插件的SQL文件在此目录下的extension 中

data:目录是数据库集群的物理存储核心,包含用户数据、元数据和配置文

件include:目录则提供编译扩展和客户端程序所需的C语言头文件。

数据库目录结构

文件和目录相关作用描述

|-----------------------------------|---------------------------------------------------------------------|
| files | 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/ (Version 9.6 or 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_expeort_snapshot 在此子目录中创建快照信息文件 |
| pg_stat/ | 包含统计子系统永久文件的子目录 |
| pg_stat_tmp/ | 包含统计子系统临时文件的子目录 |
| pg_subtrans/ | 包含子事物状态数据的子目录 |
| pg_tblspc/ | 表空间符号链接目录 |
| pg_twophase/ | 包含prepare事务的状态文件 |
| pg_wal/ (Version 10 or later) | 包含WAL (WriteAhead 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(WriteAhead Logging)段文件的子目录。在版本10中重命名为pg |

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

0ID(ObjectIdentifier)是数据库对象的唯一标识符。

表空间实际上是文件系统中的一个位置链接,即一个目录录,它是一个逻辑上

的概念,目录是它的物理存在方式。数据库中创建的对象(表、索引、数据库对

象)都保存在表空间中。postgresql初始化完成后,会有两个默认的表空间,

一个是pg_default,如果用户建表时没有指定表空间,所有建的表都会放在

pg_default中,另一个是pg_global,存放的是整个实例数故据库所共享的系统表。

base的物理布局设计

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

复制代码
[root@localhost base]# 1s /usr/local/pgsql/data/base/
postgres=# select datname,oid from pg_database;

表空间跟数据库的关系

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

系统自带表空间:
表空间pg_default是用来存储系统目录对象、用户表、用户表index、和临时
表、临时表index、内部临时表的默认空间。对应存储日录SPADATA/base/
表空间pg_global用来存放系统字典表;对应存储目录$PADATA/global/

相关推荐
小王努力学编程2 分钟前
【数据库课程设计】网上投票管理系统
数据库·c++·qt·课程设计
夕泠爱吃糖1 小时前
MySQL
数据库·mysql
_oP_i1 小时前
python实现pdf转图片(针对每一页)
前端·数据库·python
帮帮志1 小时前
12.vue整合springboot首页显示数据库表-实现按钮:【添加修改删除查询】
数据库·spring boot·后端
ikun·1 小时前
MySQL 故障排查与生产环境优化
数据库·mysql
LuckyTHP1 小时前
MySQL 自启动时报错can‘t create PID file: No such file or directory
数据库·mysql·adb
Hello World......1 小时前
互联网大厂Java面试:从Spring到微服务的深度探讨
数据库·spring boot·微服务·监控·java面试·日志管理·缓存技术
珹洺2 小时前
MyBatis实战指南(一)MyBatis入门基础与利用IDEA从零开始搭建你的第一个MyBatis系统
java·数据库·ide·intellij-idea·mybatis
慢德2 小时前
MySQL动态分区,解决手动维护的数据管理的痛点
数据库·mysql
Anchenry2 小时前
【QGIS二次开发】地图编辑-08
数据库·python·信息可视化·gis·数据可视化