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

相关推荐
博一波3 分钟前
Redis 集群:连锁银行的 “多网点智能协作系统”
数据库·redis·缓存
HashData酷克数据9 分钟前
官宣:Apache Cloudberry (Incubating) 2.0.0 发布!
数据库·开源·apache·cloudberry
秋难降9 分钟前
SQL 索引突然 “罢工”?快来看看为什么
数据库·后端·sql
TDengine (老段)38 分钟前
TDengine 时间函数 TODAY() 用户手册
大数据·数据库·物联网·oracle·时序数据库·tdengine·涛思数据
码界奇点1 小时前
KingbaseES一体化架构与多层防护体系如何保障企业级数据库的持续稳定与弹性扩展
数据库·架构·可用性测试
悟乙己1 小时前
数据科学家如何更好地展示自己的能力
大数据·数据库·数据科学家
皆过客,揽星河1 小时前
mysql进阶语法(视图)
数据库·sql·mysql·mysql基础语法·mysql进阶语法·视图创建修改删除
tuokuac2 小时前
Redis 的相关文件作用
数据库·redis·缓存
鹧鸪云光伏与储能软件开发3 小时前
投资储能项目能赚多少钱?小程序帮你测算
运维·数据库·小程序·光伏·光伏设计软件·光伏设计
2301_779503765 小时前
MySQL主从同步--主从复制进阶
数据库·mysql