由于工作需要,打算开始看一下pg内核的代码,看了一下,截止到目前2022/9/6,pg正式版本已经更新到14了,15的beta版本已经出到了3。
本着学习的态度,打算从pg15的代码开始看,里面会有很多新特性,也能够理解更先进些的数据库内核的知识。
创建的时候权限这块弄的我很恶心,所以写个博客记录一下。
环境准备
我是新开的腾讯云的云主机,使用的4核8g规模。
系统为centos8。
使用的cmake版本为3.18.6。
g++/gcc版本使用的是10.2.0。
源码准备
从官网下载源码。
地址:
https://www.postgresql.org/ftp/source/
下载及解压命令:
wget https://ftp.postgresql.org/pub/source/v15beta3/postgresql-15beta3.tar.gz
tar zxvf postgresql-15beta3.tar.gz
创建pg用户
创建pg用的用户,不然会报错,不能够创建实例。
groupadd postgres
useradd -d /home/postgres -m postgres -g postgres
passwd postgres
# 这里需要设置密码,我使用的是12345678
使用su postgres来切换用户。
使用root账户创建文件夹并赋权限
查看一下官方文件INSTALL中也有介绍:
所以先使用root账户创建一下文件夹,然后赋权限给postgres用户。
这一步网上找不到合适的教程,坑了我很久。
命令:
[root@VM-8-17-centos local]# mkdir -p /usr/local/pgsql/data
[root@VM-8-17-centos local]# chown postgres:postgres /usr/local/pgsql
[root@VM-8-17-centos local]# chown postgres:postgres /usr/local/pgsql/data
之后要用到的数据文件夹也可以放置在其他位置,不使用上面的data,比如我创建在了pgdata,也赋权限给postgres用户。
源码编译
首先切换到刚刚创建的postgres用户。
su postgres
# 进行环境依赖检查
./configure
# 使用4个并发编译
make -j4
# 无误后进行安装
make install
完成后,查看/usr/local/pgsql文件夹如下。
数据库初始化
# 此处使用绝对路径,也可用相对路径来操作。
# -D:database cluster的主目录
# -U:指定超级用户
# -W:指定用户密码
# -E:指定数据库字符编码
# --waldir:指定wal日志路径
/usr/local/pgsql/bin/initdb -D /data/pg/pgdata -U postgres -E utf8 --waldir=/data/pg/pgdata/pgwal
# 最简化的方式初始化数据库
/usr/local/pgsql/bin/initdb -D /data/pg/pgdata
启动并连接PostgreSQL
[postgres@VM-8-17-centos pgdata]$ /usr/local/pgsql/bin/pg_ctl -D /data/pg/pgdata -l logfile start
查看端口号,可以看到postgresql已经在运行了
使用psql进行连接: