baizhaoxian
作者baizhaoxian2020-01-09 09:31
容灾备份管理工程师, 无

PostgreSQL 12 安装和配置

字数 9246阅读 10024评论 0赞 4

1PostgreSQL 介绍
PostgreSQL是一个由加利福尼亚大学计算机科学部门基于Postgres 4.2版本开发的面向对象的数据库管理系统。POSTGRES率先提出了许多概念,直到后来,这些概念才在一些商业数据库系统中使用。PostgreSQL是一个后来开源的代码始于伯克利源代码。它支持大部分的SQL标准和提供了许多现代的特性。
·复杂查询(complex queries)
·外键(foreign keys)
·触发器(triggers)
·可更新视图(updatable views)[物化视图]
·事务完整性(transaction integrity)
·多版本并发控制(MVCC)
除此之外,用户可以使用多种方式扩展PostgreSQL,例如通过添加以下:
·数据类型(data types)
·函数(functions)
·操作符(operators)
·聚合函数(aggregate functions)
·索引方式(index methods)
·过程语言(procedural languages)
并且由于自由通行,PostgreSQL可以通过任何人无论是出于私有化,商业化,或者学术上的任何目的免费地修改和发布。
2 PostgreSQL 简要发展史
现在被称为PostgreSQL的对象关系数据库管理系统派生于加利福尼亚大学伯克利分校所编写发型的POSTGRES软件包。PostgreSQL经过二十多年的发展,现已成为任何地方可以使用的最先进的开源数据库。
2.1伯克利 POSTGRES 项目
POSTGRE项目,由Michael Stonebraker教授主导,DARPA,ARO和NSF和ESL等。POSTGRES开始于1986年。最初的系统概念在ston86中被提出,最初的数据模型的定义出现子ROWE87中。ston87a中描述了规则系统设计。ston87b中详细描述了存储管理的基本原理和架构。
POSTGRES大致经历了几个版本:
1988年在ACM-SIGMOD会议上展示的于1987年第一个投入运行的"演示软件"系统。ston90a描述的第一个版本(Version 1)于1986年6月发布给一些外部用户。为回应对ston89中描述的第一个规则系统批评,在ston90b中重新设计了规则系统并于1990年6月发布了新规则系统的第二个版本(Version 2)。1991年发布的 Version 3为多个存储管理增加了支持,改进了查询执行器,并且重新写了规则系统。往后发行的直到Postgres95之前的版本都注重于其可移植性和可靠性。
POSTGRES已经被用于实施不同的研究和产品应用。包括:金融数据分析系统,喷气引擎性能监控包(jet engin performanc),和小行星追踪数据库,医药信息数据库,和一些地理信息系统。POSTGRES也被一些大学用来作为教学的工具。最终,Illustra Information Technologies重构了其代码并使其商业化。至1992年底,POSTGRES成为了Sequoia 2000 科学计算项目的主要数据管理器。
在1993年,外部社区的用户规模几乎增加了一倍。原型代码维护和支持越来越明显的占用了本应该进行数据库研究的大量时间。为了减轻这种负担,伯克利POSTGRES项目官方以版本 Version 4.2结束。
2.2 Postgres95
在1994年,Andrew Yu和Jolly Chen为 POSTGRES增加了SQL语言翻译器。并起了一个新的名字,Postgres95正式开源。Postgre95代码完全是 ANSI C,并且大小减少了25%。许多的内部改变提高了其性能和维护性。Postgre95 发型的1.0.x在Wisconsin Benchmark跑分中比POSTGRES Version 4.2要快30-50。除了修复bug,以下是主要增强的内容:
·查询语言PostQUEL使用SQL代替,不支持子查询,但是用户自定义的函数可以在Postgres95中模仿子查询。聚合函数重新实现。增加支持GROUP BY查询语句。
·新的程序(psql)作为交互SQL查询,该交互使用GNU的readline。很大程度上取代了旧的监控程序。
·一个新的front-end库,libpgtcl,基于tcl的客户端被支持。模版shell,pgtclsh,提供了新的tcl 命令在Postgres95服务器上和tcl应用程序交互。
·大对象接口被修改。倒置大对象是存储大对象的仅有机制。(倒置文件系统被移除)
·实例级别的规则系统被移除。规则仍然可用由于重写规则。
·介绍规则SQL特性的简短手册也伴随源代码在 Postgre95中发布。
·GNU make(替代了BSD make)被用来重构。同时,Postgres95也能够被未打包的GCC编译
2.3 PostgreSQL
到1996年,很明显,Postgres95经不起时间的考验。因此选择了一个新的名字,PostgreSQL,同时,版本号被置于6.0开始。至此,PostgreSQL正式作为开源数据库正式被发行。
2.4 PostgreSQL的特点
PostgreSQL支持市面上流行的所有操作系统,包括Unix,Linux和Windows,也支持如AIX,Solaris,MacOS等,这为PostgreSQL的推广奠定了基础。同时,PostgreSQL以支持丰富的编程接口,如流行的Java, C,C++,Python等,也支持如Perl,Tcl,Ruby等编程接口,也支持windows下的ODBC编程接口,编程接口的丰富和通用特性为PostgreSQL提供了广泛的开发者支持。
PostgreSQL同时支持丰富的数据类型,也支持丰富的服务器编程,如触发器,存储过程,服务器编程接口,后台工作进程,逻辑解码,复制进度追踪等。
3 配置和安装
3.1 系统环境准备
Redhat Enterprise 7.6
PostgresSQL 12
编译环境要求:
make 版本3.8以上
GCC编译器(兼容C99)
解压命令tar
记录命令行操作包readline(没有该包无法使用方向键)
可选环境要求:
因为PostgreSQL支持服务器编程,因此可以根据需要安装需要的模块
如perl python tcl等
也可以启用本地语言支持NLS,该功能需要安装gettext
支持加密的客户端连接(需要安装openssl) 使用服务支持验证(kerberos,openldap,pam)
准备包(需提前配置好yum源)
准备包(需提前配置好yum源)
yum install -y \
libicu-devel.x86_64 \
icu.x86_64 \
perl-ExtUtils-Embed.noarch \
readline.x86_64 \
readline-devel.x86_64 \
zlib-devel.x86_64 \
openssl-devel.x86_64 \
pam-devel.x86_64 \
libxml2-devel.x86_64 \
libxslt-devel.x86_64 \
systemd-devel.x86_64 \
python36.x86_64 \
python36-devel.x86_64 \
openldap.x86_64 \
openldap-devel.x86_64 \
docbook*
3.2系统设置
1 关闭防火墙
[root@sdedu ~]# systemctl stop firewalld
[root@sdedu ~]# systemctl disable firewalld

如果不关闭防火墙,则将postgres 端口服务添加至防火墙中

[root@sdedu ~]# firewall-cmd --add-port=5432 --permanent
2 关闭Selinux

会话及关闭

[root@sdedu ~]# setenforce 0

永久关闭

[root@sdedu ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
3 配置资源限制
[root@sdedu ~]# cat /etc/security/limits.conf | tail -6
postgres soft nofile 4096
postgres hard nofile 65536
postgres soft nproc 2048
postgres hard nporc 16384
postgres soft stack 10240
postgres hard stack 65536

nofile 最大能打开的文件描述符

nproc 最大的进程数

stack 最大栈空间大小(单位为kb)

3.3源码编译安装
源码安装通常可以根据自己的要求完成定制化的安装,如目录规划,内存大小,日志大小,脏块缓存大小及实现PostgreSQL支持的PL/tcl pl/perl pl/python等服务器过程化编程语言等等,以根据业务调整安装配置参数来提高服务器性能和充分利用服务器资源。具体步骤如下:
1 上传包至服务器/root/pack目录
[root@sdedu pack]# ls postgresql-12.0.tar.bz2
postgresql-12.0.tar.bz2
2 创建postgres用户并授权压缩包权限
由于postgresql的启动停止等命令只能使用postgres用户操作,因此必须要创建postgres用户
[root@sdedu ~]# useradd -u 2000 postgres
[root@sdedu ~]# chown postgres:postgres pack/postgresql-12.0.tar.bz2

移动 postgresql-12.0.tar.bz2 包到 /home/postgres用户下

[root@sdedu ~]# mv pack/postgresql-12.0.tar.bz2 /home/postgres/
3 切换到postgres用户,并解压源码包
[root@sdedu ~]# su - postgres
[postgres@sdedu ~]$ tar -jxf postgresql-12.0.tar.bz2
4 进入到解压目录
[postgres@sdedu ~]$ cd postgresql-12.0/
[postgres@sdedu postgresql-12.0]$ ll
5 创建PostgreSQL用户的安装目录并授权
切换到root用户执行下列命令
[root@sdedu ~]# mkdir -p /data/pgsql/
[root@sdedu ~]# chown postgres.postgres -R /data/
6 执行configure预先检测配置环境
以下操作都以postgres用户进行

切换至 postgres用户并进入到源码解压目录

./configure \
--prefix=/data/pgsql/ \ #准备安装路径
--exec-prefix=/data/pgsql/exec \ #定义安装结构路径
--bindir=/data/pgsql/bin \ #定义PostgreSQL 相关服务命令
--sysconfdir=/data/pgsql/etc \ #定义系统配置目录
--libdir=/data/pgsql/exec/lib \ #定义相关库和动态库目录
--includedir=/data/pgsql/include \ #定义支持C 和 C++ 支持的头文件
--datarootdir=/data/pgsql/share \ #定义可供数据库只读的根目录
--datadir=/data/pgsql/share/data \ #定义可以数据库制度的目录
--localedir=/data/pgsql/share/locale \ #定义域目录
--mandir=/data/pgsql/share/man \ #定义 man 帮助手册目录
--docdir=/data/pgsql/share/doc/postgresql \ #定义 doc 格式帮助文档
--htmldir=/data/pgsql/share/html \ #定义html 格式帮助文档
--enable-nls="zh_CN" \ #定义主机支持的语言环境
--with-pgport=5432 \ #定义数据库服务的监听端口
--with-perl \ #启用支持 pl/perl 的服务器编程语言
--with-python \ #启用支持 pl/python 的服务器编程语言
--with-tcl \ #启用支持 pl/tcl 的服务器编程语言
--with-icu \ #启用支持 icu 的动态库
--with-openssl \ #启用支持 ssl(安全套接层) 连接
--with-pam \ #启用支持PAM认证模块
--with-ldap \ #启用支持轻量级访问目录数据库
--with-systemd \ # 启用 systemd 服务器
--with-readline \ #启用支持命令行记录功能
--with-libxml \ #启用 SQL 支持的XML 功能
--with-libxslt \ #启用 SQL 支持的 XML2 的依赖
--with-segsize=2 \ #配置段大小,默认数据文件段大小为 1G
--with-blocksize=8 \ #配置数据块的I/O大小
--with-wal-blocksize=8 #配置 wal 块的I/O大小
7 执行编译并安装
[postgres@sdedu ~]$ export COPT='-Werror'

执行编译,-j 表示使用多job编译,受限于CPU核数和线程数

[postgres@sdedu ~]$ make all -j16

如果要build 所有可以build的内容(html 和man 以及contrib等)使用如下

make world –j16

编译安装

make install –j16

如果需要安装手册帮助文档,执行

make install-docs –j16

如果使用全局编译操作,那么使用

make install-world –j16
8 导入PostgreSQL lib库
[postgres@sdedu ~]$ export LD_LIBRARY_PATH=/data/pgsql/exec/lib
9 导入PostgreSQL的命令可执行路径
[postgres@sdedu ~]$ export PATH=/data/pgsql/bin:$PATH
10 导入MAN帮助信息
[postgres@sdedu ~]$ export MANPATH=/data/pgsql/share/man
为方便起见,将以上环境变量写入到/data/pgsql/exec/postgresql.env中
[postgres@sdedu ~]$ cat >> /data/pgsql/exec/postgresql.env < export LD_LIBRARY_PATH=/data/pgsql/exec/lib

export PATH=/data/pgsql/bin:\$PATH
export MANPATH=/data/pgsql/share/man
EOF

然后将该文件添加到/home/postgres/.bash_profile中,并重新读取环境变量
11 初始化数据目录
pg_ctl -D /data/pgsql/pgdata/ initdb
或者
initdb -D /data/pgsql/pgdata
12 启动数据库
[postgres@sdedu ~]$ pg_ctl start -D /data/pgsql/pgdata/ -l /tmp/logfile
注意,启动停止数据库必须使用 postgres 用户执行
13 登录数据库
[postgres@sdedu ~]$ psql -U postgres -d postgres
14 如果使用root用户登录数据库,则在/root/.bash_profile中配置PostgreSQL的环境变量(不建议这样做)
15 停止数据库
[postgres@sdedu ~]$ pg_ctl stop -D /data/pgsql/pgdata/ -l /tmp/logfile ile
至此,PostgreSQL 12源码编译安装完成,现在既可以在数据库中执行各种符合规范的操作。
16 配置postgresql系统服务控制单元和开机启动
配置该服务之后,Redhat Linux就可以使用 systemctl系统控制命令来启动PostgreSQL数据库了。
使用root用户切换到 /usr/lib/systemd/system目录,编辑postgresql-12.service文件,该文件默认不存在,需要手动编辑,如下:
[root@sdedu system]# cat postgresql-12.service
[Unit]
Description=PostgreSQL database server
After=network.target
[Service]
Type=forking
User=postgres
Group=postgres
Environment=PGPORT=5432
Environment=PGDATA=/data/pgsql/pgdata
OOMScoreAdjust=-1000
ExecStart=/data/pgsql/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT}" -w -t 300
ExecStop=/data/pgsql/bin/pg_ctl stop -D ${PGDATA} -s -m fast
ExecReload=/data/pgsql/bin/pg_ctl reload -D ${PGDATA} -s
TimeoutSec=300
[Install]
WantedBy=multi-user.target
然后之下下列命令启用服务控制守护
[root@sdedu init.d]# systemctl daemon-reload
使用systemctl系统服务控制命令启动postgresql
[root@sdedu ~]# systemctl start postgresql-12.service
4 rpm 安装
目前的Linux 7的发行版本已经集成了PostgreSQL 的相关套件,只需要配置好yum源既可以使用 yum 软件安装命令安装,系统自带的postgresql的版本为9.2版本。
1 配置yum
[root@sdedu ~]# cat /etc/yum.repos.d/local.repo
[local]
name=local
baseurl=file:///mnt
enabled=1
gpgcheck=0
2 更新yum源
[root@sdedu ~]# yum clean all && yum repolist all
3 检查PostgreSQL相关软件套件
[root@sdedu yum.repos.d]# yum list all | grep ^postgresql
4 执行yum安装
[root@sdedu ~]# yum install -y postgresql-server.x86_64
使用yum安装后,默认的命令路径位于/usr/bin下
5 初始化数据目录

创建初始化数据目录

[root@sdedu ~]# mkdir -p /pg92/pgdata/data/

为数据目录授权 postgres 用户所属主和所属组

[root@sdedu ~]# chown postgres.postgres -R /pg92

切换至 postgres 用户

[root@sdedu ~]# su – postgres

执行 初始化数据库命令

[postgres@sdedu ~]$ /usr/bin/initdb -D /pg92/pgdata/data/
6 启动数据库
[postgres@sdedu ~]$ /usr/bin/pg_ctl start -D /pg92/pgdata/data/ -l /tmp/logfile
server starting
7 配置服务开机启动
[root@sdedu ~]# systemctl enable postgresql.service
Yum安装配置相对于简单,可以作为学习入门
5拓展
除了使用操作系统本身集成的postgresql软件套件外,也可以通过官方网站获取官方集成的rpm软件套件,下去可自行尝试,在Linux下下载必须要保证网络畅通,具体下载地址:
https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
下载官方提供的 rpm 源配置包
然后使用rpm 安装该包
[root@sdedu ~]# rpm -ivh pgdg-redhat-repo-latest.noarch.rpm
或者直接使用yum进行安装
[root@sdedu ~]# yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
然后执行yum安装客户端
[root@sdedu ~]# yum install postgresql12
执行yum安装数据库服务端
[root@sdedu ~]# yum install postgresql12-server
初始化数据目录
[root@sdedu ~]# /usr/pgsql-12/bin/postgresql-12-setup initdb
通过systemctl启动数据库和配置开机启动
[root@sdedu ~]# systemctl start postgresql-12
[root@sdedu ~]# systemctl enable postgresql-12

转摘 晟数囍儿

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

4

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广