Linux 下源代码编译安装 PostgreSQL 初体验
文章目录
[toc]
喜大普奔,在 PostgreSQL 发布 PostgreSQL 16.4, 15.8, 14.13, 13.16, 12.20, and 17 Beta 3 Released! 之际,我来开始学习下 PostgreSQL,首先体验它的安装,之前也有安装过,但是没有全面的记录下,今天详细体验下他的安装。同时也是本站首次新增了PostgreSQL 的分类,新技能又增加了。
本次安装是 arm
架构的 Linux
。
1 | Linux ydora01 5.15.0-206.153.7.el8uek.aarch64 #2 SMP Thu May 9 16:18:54 PDT 2024 aarch64 aarch64 aarch64 GNU/Linux |
操作系统:
Red Hat Enterprise Linux release 8.10 (Ootpa)
源代码编译 PostgreSQL 安装
前提条件
https://www.postgresql.org/docs/current/install-requirements.html
依赖以下几个软件包
tar
、make/gmake
、gcc
、readline
、zlib
、libicu
,其中 make
需要 3.81 及以上版本,其他通常系统自带的即可,make
的版本系统自带的也满足要求,但是安装文档上有明确要求make
的版本,其他依赖包没有要求具体的版本,当然也可以不需要 readline
、zlib
、libicu
等,编译的时候增加 --without-readline
、--without-zlib
,--without-icu
即可。
在这里建议默认的都启用。下面检查下Red Hat Enterprise Linux release 8.10 (Ootpa)
自带的 make
的版本
1 | [root@ydora01 pg]# make -version |
可以看到gmake
软连接到 make
,也就是gmake
等同于make
,在看其他安装文档的时候,有的是make
、有的是gmake
,知道了 gmake
是软链到make
就很好理解了。
其他依赖包没有安装的话,直接通过yum
来安装即可。
获取源代码安装包
官方网站 https://www.postgresql.org –>Download–>Source 选择对应的版本,本次安装的版本是 16.4。
这里选择 postgresql-16.4.tar.gz,也可以根据个人喜好选择postgresql-16.4.tar.bz2,下载之后,可以对照相应的md5/sha256,确认安装介质下载的完整。
1 | [root@ydora01 pg]# wget https://ftp.postgresql.org/pub/source/v16.4/postgresql-16.4.tar.gz |
创建用户
1 | groupadd postgres |
说明:/data/pg 的权限都给 postgres:postgres
规划目录
名称 | 目录 | 备注 |
---|---|---|
pg 专有目录 | /data/pg/ | chown -R postgres:postgres |
源代码安装包目录 | /data/pg/postgresql-16.4.tar.gz | wget 获取 |
源代码目录 | /data/pg/postgresql-16.4 | 解压源代码安装包产生 |
软件安装目录 | /data/pg/pg164 | 可以不用手动创建,在make install 会自动生成。 |
数据目录 | /data/pg/pg164/data | 可以不用手动创建,如果创建了,必须 保障其为空 |
log 目录 | /data/pg/pg164/log |
解压源代码软件包
1 | cd /data/pg/ |
1 | [root@ydora01 pg]# ll |
执行 configure
执行configure
的命令行选项,–prefix
参数,表示把PostgreSQL
安装在哪个路径下,这里,我们就把它安装在前面规划目录中配置的/data/pg/pg164
路径下。默认情况下,不带该参数时,则会安装在/usr/local/pgsql路径下。
1 | cd /data/pg/postgresql-16.4 |
注意:执行 configure的需要在源码解压出来的路径下,即 cd /data/pg/postgresql-16.4
configure: creating ./config.status
config.status: creating GNUmakefile
config.status: creating src/Makefile.global
config.status: creating src/include/pg_config.h
config.status: creating src/include/pg_config_ext.h
config.status: creating src/interfaces/ecpg/include/ecpg_config.h
config.status: linking src/backend/port/tas/dummy.s to src/backend/port/tas.s
config.status: linking src/backend/port/posix_sema.c to src/backend/port/pg_sema.c
config.status: linking src/backend/port/sysv_shmem.c to src/backend/port/pg_shmem.c
config.status: linking src/include/port/linux.h to src/include/pg_config_os.h
config.status: linking src/makefiles/Makefile.linux to src/Makefile.port
执行 make world
这里,也可以简单执行make
就可以build
安装文件的,但是,make world
的是指把 PostgreSQL 相关的文档,HTML,以及其它的一些模块都会一起编译进去。如果当初没有执行make work
,后来可以进到当时安装的那个源文件路径下即本次的安装的目录/data/pg/postgresql-16.4
,重新执行make world
,然后make install-world
即可。本次体验使用 make world
,也建议日常使用的时候之际使用 make world
或者gmake world
,前面讲过gmake
和make
是等价的。
时间略长,完成之后如下:
make[2]: Leaving directory ‘/data/pg/postgresql-16.4/contrib/vacuumlo’
make[1]: Leaving directory ‘/data/pg/postgresql-16.4/contrib’
执行 make install-world
make[2]: Leaving directory ‘/data/pg/postgresql-16.4/contrib/unaccent’
make -C vacuumlo install
make[2]: Entering directory ‘/data/pg/postgresql-16.4/contrib/vacuumlo’
/usr/bin/mkdir -p ‘/data/pg/pg164/bin’
/usr/bin/install -c vacuumlo ‘/data/pg/pg164/bin’
make[2]: Leaving directory ‘/data/pg/postgresql-16.4/contrib/vacuumlo’
make[1]: Leaving directory ‘/data/pg/postgresql-16.4/contrib’
完成之后,会自动产生/data/pg/pg164/
目录
1 | [postgres@ydora01 pg]$ cd /data/pg/pg164/ |
初始化数据库
/data/pg/pg164/bin/initdb -D /data/pg/pg164/data
1 | [postgres@ydora01 postgresql-16.4]$ /data/pg/pg164/bin/initdb -D /data/pg/pg164/data |
启动数据库
可以看到在上一步的初始化之后的输出信息有显示:
Success. You can now start the database server using:
/data/pg/pg164/bin/pg_ctl -D /data/pg/pg164/data -l logfile start
可以通过 /data/pg/pg164/bin/pg_ctl -D /data/pg/pg164/data -l logfile start
来启动数据库。
其中 -l logfile
是指定日志文件,咱们这里规范一点,将日志文件设置为 /data/pg/pg164/log/postgres.log
所以用以下命令启动:
1 | /data/pg/pg164/bin/pg_ctl -D /data/pg/pg164/data -l /data/pg/pg164/log/postgres.log start |
1 | [postgres@ydora01 log]$ /data/pg/pg164/bin/pg_ctl -D /data/pg/pg164/data -l /data/pg/pg164/log/postgres.log start |
检查数据库进程
1 | postgres 1604428 1 0 17:47 ? 00:00:00 /data/pg/pg164/bin/postgres -D /data/pg/pg164/data |
连接数据库
1 | [postgres@ydora01 log]$ /data/pg/pg164/bin/psql |
设置环境变量
修改环境变量的原因是,我们要将 PostgreSQL 数据库的可执行程序如:psql
,pg_ctl
,pg_dump
,pg_restore
,等加入到当前用户的环境变量 PATH
,这样,以后我们就可以直接执行这些命令,而不再需要通过调用绝对路径,像上面连接数据库的时候,执行/data/pg/pg164/bin/psql
,或者启动数据库调用/data/pg/pg164/bin/pg_ctl
命令,写的完整的命令目录,这样显得有点臃长。
另外,我们需要配置一个PGDATA
的环境变量,该变量用于指定数据库集群(CLUSTER)的路径,他这个集群跟 ORACLE 集群是不一样的,PG 是单机的,整个PG 实例就是一个CLUSTER,这个 PGDATA
指向的就是 数据目录 /data/pg/pg164/data
,就是在初始化数据库的时候自动创建的。
1 | PATH=$PATH:/data/pg/pg164/bin |
1 | [postgres@ydora01 ~]$ PATH=$PATH:/data/pg/pg164/bin |
这样的话,我们使用 psql
客户端,直接输入 psql
即可。
为了方便:我们把环境变量写入.bash_profile
:
1 | [postgres@ydora01 ~]$ cat .bash_profile |
执行 . .bash_profile
或者 source .bash_profile
生效的。
修改数据库参数
原文作者: liups.com
原文链接: http://liups.cn/posts/9b1904ec/
许可协议: 知识共享署名-非商业性使用 4.0 国际许可协议