目录
[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
[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
[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结构
数据库的文件默认保存在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 |

0ID(ObjectIdentifier)是数据库对象的唯一标识符。
表空间实际上是文件系统中的一个位置链接,即一个目录录,它是一个逻辑上
的概念,目录是它的物理存在方式。数据库中创建的对象(表、索引、数据库对
象)都保存在表空间中。postgresql初始化完成后,会有两个默认的表空间,
一个是pg_default,如果用户建表时没有指定表空间,所有建的表都会放在
pg_default中,另一个是pg_global,存放的是整个实例数故据库所共享的系统表。
每个数据库都会在$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/