受到这篇文章的启发,记录一下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//重载规则
远程测试
按照本教程设置完毕后重新启动后数据库无法自动启动,现在来添加自动启动文件:
如果按照本教程直接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