安装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/

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