openEuler 24.03 LTS编译式安装postgresql-16.3

344 阅读2分钟

受到这篇文章的启发,记录一下postgre安装过程

下载postgresql到home目录下

安装依赖:

sudo dnf install -y perl-ExtUtils-Embed readline-devel python3-devel pam-devel libxml2-devel libxslt-devel openldap-devel lz4-devel llvm-devel systemd-devel container-selinux selinux-policy-devel openssl-devel clang-devel flex-devel bison-devel glibc-devel gcc-c++ gcc cmake lsof net-tools libicu-devel tar

解压文件:

tar -zxvf postgresql-16.3.tar.gz

创建文件夹用于存放postgre相关文件:

sudo mkdir -p /home/pgdata/data

安装文件:

// 1. 进入解压文件夹目录
cd /home/postgresql-16.3
// 2. 检测系统环境并生成 Makefile 文件
./configure --prefix=/home/pgdata
// 3. 编译 & 安装(在编译的时候,可以指定 jobs 任务个数,这样可以使编译时间稍微快些。)
gmake -j 3 world && gmake install-world
// 4. 编译失败执行清理
gmake clean #清除上一次make命令生成的文件
gmake distclean #清除上一次make以及configure命令生成的文件

安装结束查看文件:

ls -all /home/pgdata/

结果:
drwxr-xr-x. 7 root root 4096 8月24日 18:38 .
drwxr-xr-x. 5 root root 4096 8月24日 18:26 ..
drwxr-xr-x. 2 root root 4096 8月24日 18:38 bin//存放的可执行文件
drwxr-xr-x. 2 root root 4096 8月24日 18:26 data//存放数据;
drwxr-xr-x. 4 root root 4096 8月24日 18:38 include//存放 .h 头文件;
drwxr-xr-x. 4 root root 4096 8月24日 18:38 lib//存放安装所需的各种依赖库,动态库;
drwxr-xr-x. 5 root root 4096 8月24日 18:38 share存放所需的插件(extension),组件;

进入home目录:

cd /home
//创建临时环境变量
vi pgsql-env.sh

输入下面的配置信息:

export PGHOME=/home/pgdata
export PGHOST=localhost
export PATH=$PGHOME/bin:$PATH
export LD_LIBRARY_PATH=/home/pgdata/lib:$LD_LIBRARY_PATH 
export PGDATA=/home/pgdata/data
export PGPORT=5432 
export PGUSER=postgres

保存,退出,执行:

source pgsql-env.sh

执行后验证:

initdb --version

输出结果:

initdb (PostgreSQL) 16.3

添加postgres用户:

# 添加非 root 用户 postgres  
sudo useradd postgres  
# 给 postgres 用户设置密码  
sudo passwd postgres  
# 给 postgres 用户授权 data 目录可执行权限  
sudo chown -R postgres:postgres /home/pgdata/data  
//变更临时环境变量所有权
sudo chown postgres:postgres /home/pgsql-env.sh

切换到postgres用户下完成数据库初始化:

su postgres
//添加临时环境变量
source /home/pgsql-env.sh

初始化数据据库:

initdb -D /home/pgdata/data/ -U postgres

创建日志文件夹(可选):

mkdir -p /home/pgdata/data/database_log
touch /home/pgdata/data/database_log/databaselog

启动pg:

pg_ctl -D /home/pgdata/data/ -l /home/pgdata/data/database_log/databaselog start

输出结果:

waiting for server to start.... done
server started

配置信息:

输入psql打开pg,然后更改postgres密码:

ALTER USER postgres WITH PASSWORD '你想要的postgre密码';

修改配置,打开远程连接:

postgres.conf:

listen_addresses = '*'

pg_hba.conf:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             0.0.0.0/0               scram-sha-256
# IPv6 local connections:
host    all      	all             ::/0                    scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

修改完成后重启数据库

pg_ctl -D /home/pgdata/data/ -l /home/pgdata/data/database_log/databaselog restart

输入exit退出到root

firewall-cmd --zone=public --add-port=5432/tcp --permanent//开放5432端口
firewall-cmd --reload//重载规则

远程测试 1724499606945.png

按照本教程设置完毕后重新启动后数据库无法自动启动,现在来添加自动启动文件:

如果按照本教程直接cd /home/postgresql-16.3/contrib/start-scripts文件夹,如果不是,找到start-scripts文件夹的位置:find / -name start-scripts

drwxrwxrwx.  3 1107 1107 4096  5 7 04:29 .
drwxrwxrwx. 61 1107 1107 4096  5 7 04:29 ..
-rw-r--r--.  1 1107 1107 1441  5 7 04:21 freebsd
-rw-r--r--.  1 1107 1107 3526  5 7 04:21 linux
drwxrwxrwx.  2 1107 1107 4096  5 7 04:29 macos

修改linux文件:

#修改到你安装的位置
prefix=/home/pgdata

PGDATA="/home/pgdata/data"

PGLOG="$PGDATA/database_log/databaselog"

#同时修改start中的su为runuser以保证可以安全的通过SELinux
runuser - $PGUSER -c "$DAEMON_ENV $DAEMON -D '$PGDATA' >>$PGLOG 2>&1 &"

复制文件: cp linux /etc/init.d/postgresql 添加开机自动启动:

cd /etc/init.d/
chmod a+x postgresql
chkconfig --add postgresql