PostgreSql源码安装
PostgreSQL是一个强大的 开源对象关系数据库系统 ,它使用并扩展了SQL语言,并结合了许多功能,可以安全地存储和扩展最复杂的数据工作负载。
一、源代码下载
- PostgreSql官方网址,进入Download页面,此处选择的是下边的File Browser(文件浏览)进入下载页面后选择Source进行源码选择对应版本进行下载。[此处选择v14.9版本]
此处选择 bz2 or gz 为后缀的安装包进行下载,任选一个即可[此处选择gz压缩包] - 下载到本地操作系统的任意位置,之后使用SFTP上传到Linux服务器即可。
二、操作系统配置
- 管理用户的创建
root根用户权限较大,不适合管理数据库,此处建议非root用户管理数据库,因此可以创建单独用户和组进行区分管理。
shell
groupadd postgres 添加组
useradd -g postgres postgres 创建用户并划分组
passwd postgres 设置用户密码
- 安装依赖包
sql
yum groupinstall -y "Development Tools" "Legacy UNIX Compatibility"
groupinstall: yum 命令,用于安装指定的软件包组。
"Development Tools": 软件包组名称,通常包含软件开发的工具和库,比如编译器、调试器等。
"Legacy UNIX Compatibility": 软件包组的名称,包含用于提供与传统 UNIX 系统兼容性的工具和库。
shell
yum install -y bison flex readline* zlib-devel gcc* gmake
此处安装依赖可能会报错,原因是镜像中找不到对应的依赖,我这里把原来的各种国内源镜像替换回默认国外镜像后执行yum clean all & yum makecache后重新安装就没问题了。
- 创建软件安装目录和数据存储目录
shell
mkdir -p /usr/local/pg12
mkdir -p /pgdata/12/data
chown -R postgres. /pgdata
chown -R postgres. /usr/local/pg12
chmod 700 /pgdata/12/data -R
此处的postgres对应的是用户名,文件夹无法创建的可以使用root用户权限sudo进行创建。
- 操作系统参数设置
说在前边,个人使用时可以不必设置这些参数。
pg和oracle类似需要调一些内核参数,因为是多进程,对于内核参数的要求较多;
shell
sudo vim /etc/sysctl.conf
kernel.shmmax = 68719476736 共享内存段的最大值,单位是字节。 64GB
kernel.shmall = 4294967296 系统中所有共享内存段的总共享内存页数 大约是 16TB
kernel.shmmni = 4096 系统中最大的共享内存段数目。
kernel.sem = 50100 64128000 50100 1280 信号量的值,格式为 semmsl semmns semopm semmni
fs.file-max = 7672460 系统中最大文件句柄数。
net.ipv4.ip_local_port_range = 9000 65000 系统分配给本地 TCP/UDP 端口的范围。
net.core.rmem_default = 1048576 接收套接字缓冲区的默认大小。
net.core.rmem_max = 4194304 接收套接字缓冲区的最大大小。
net.core.wmem_default = 262144 发送套接字缓冲区的默认大小。
net.core.wmem_max = 1048576 发送套接字缓冲区的最大大小。
这些参数可以根据实际情况进行修改!
限制参数修改:
该文件用于设置用户的资源限制。在这里,针对所有用户设置了文件描述符数量、进程数量、栈大小和内存锁定等限制。
shell
sudo vim /etc/security/limits.conf
* soft nofile 131072 文件描述符的软限制
* hard nofile 131072 文件描述符的硬限制
* soft nproc 131072 进程数量的软限制
* hard nproc 131072 进程数量的硬限制
* soft stack unlimited 栈大小的软限制
* hard stack unlimited 栈大小的硬限制
* hard memlock 50000000 内存锁定的硬限制
* soft memlock 50000000 内存锁定的软限制
软限制是指进程可以自由地增加或减少的资源限制。当进程达到软限制时,系统会向进程发送一个警告信号,但是进程仍然可以继续使用更多的资源,直到达到硬限制。
三、编译安装
可以提前创建文件夹指定位置安装(本文在/opt/module/postgresql目录):
- 解压缩到指定目录
shell
tar -zxvf postgresql-14.9.tar.gz -C /opt/module
- 进入解压的指定目录下执行如下命令
shell
./configure --prefix=/usr/local/pg12 --with-pgport=5432
参数名 | 含义 |
---|---|
prefix | 软件目录也就是安装目录 |
with-perl | 编译时添加该参数才能够使用 perl 语法的 PL/Perl 过程语言写自定义函数,需要提前安装好相关的 perl 开发包:libperl-dev |
with-python | 编译时添加该参数才能够使用 python 语法的 PL/Perl 过程语言写自定义函数,需要提前安装好相关的 python 开发包:python-dev |
with-blocksize & with-wal-blocksize | 默认情况下 PG 数据库的数据页大小为 8KB,若数据库用来做数仓业务,可在编译时将数据页进行调整,以提高磁盘 IO |
- 编译安装
shell
#全部可用功能编译
gmake world
#把所有编译好的进行安装(建目录+拷贝)
gmake install -world
- 配置环境变量
shell
su postgres
cd ~
vim .bash_profile
export PGDATA=/pgdata/12/data
export LANG=en_US.utf8
export PGHOME=/usr/local/pg12
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH
export DATE=`date +"%Y%m%d%H%M"`
export PATH=$PGHOME/bin:$PATH:.
export MANPATH=$PGHOME/share/man:$MANPATH
export PGUSER=postgres
source .bash_profile
此处主要为配置环境变量,不一定需要将修改存放到bash_profile中,存放到任意一个shell可加载的环境变量文件中即可。
注意最后的PGUSER为我们定义的用户
能成功显示版本信息即是配置成功。
- 简易初始化数据
sql
initdb -D /pgdata/12/data 此处为前边创建的数据目录
四、启动数据库
1 创建启动日志/pgdata/pglog/logs/start.log (可以自定义)
2 启动数据库服务,并使用日志文件
sql
pg_ctl -D /pgdata/12/data/ -l /pgdata/pglog/logs/start.log start
3 数据库client
第一次安装仅允许本地socket连接,一般socket再/tmp目录下,是个隐藏文件,直接输入psql,输入密码即可进入命令行,默认进入系统postgres这个库中;
4 参数修改
PostgreSQL 数据目录中,会自动生成 pg_hba.conf 文件,该文件是一个黑名单访问控制文件,可以控制允许哪些 IP 地址的机器访问数据库。默认,不允许远程访问数据,所以安装完成后需要配置下。
shell
su postgres
cd $PGDATA
vim pg_hba.conf
如果允许任何用户远程连接数据库,连接时需要提供密码,在最后一行添加
shell
host all all 0/0 md5
此外由于默认只监听本地,还需要配置linstener才能监听到,在数据目录中的 postgresql.cnf 中,可以找到如下内容:
其中,参数 listen_addresses 表示监听的 IP 地址,默认是在 localhost/127.0.0.1 处监听,这样会导致远程主机无法访问数据库,如果需要远程访问,需要将其设置为实际网络地址,设置为 * 表示监听所有地址,该参数修改重启生效。
配置完之后便可开启远程连接
五、相关命令
- 查看版本信息: select version();
- 重启数据库服务: pg_ctl restart -mf