准备条件

OpenEuler(虚拟机):
版本:22.03-LTS-SP3
下载地址:https://www.openeuler.org/zh/download/
PostgreSQL:
版本:16.3源码包
下载地址:https://www.postgresql.org/ftp/source/

操作系统安装

安装过程与centos基本一致,此处就省略了,安装的时候可以把需要的网络工具和开发工具包勾上,避免后续编译需要去装相应的包。

安装Postgresql

安装步骤

  • 阅读官方源码安装说明;
  • 下载源码包;
  • 根据官方说明安装必须依赖;
  • 根据官方说明编译安装PostgreSQL;
  • 配置、启动PostgreSQL;

如无特殊说明,本说明是以root账号登录安装,所以特殊需要系统权限命令不再需要sudo前缀,如实际安装过程未采用root账号导致安装出现错误,可尝试在命令前增加sudo。

安装说明

可以查看源码包里的INSTALL文件,主要看前面的两部分Requirements和Short Version。

安装依赖

根据文档说明必要的依赖如下:

  • make 需要版本3.81+
  • gcc
  • tar
  • Readline
  • zlib

其他可选依赖根据自身需要选装。如果默认安装操作系统的时候选择了开发包,那么上面的依赖基本上都有了。
也可以通过命令全部安装
dnf install readline-devel zlib-devel lz4-devel libzstd-devel systemd-devel python3-devel make gcc

编译安装

解压源码包
tar xvf postgresql-16.3.tar.gz
生成postgresql-16.3目录
官方提供的简单版本的安装命令如下:

./configure ##配置
make ##编译
su ##切换管理员权限
make install ##安装
adduser postgres ##添加postgres用户
mkdir /usr/local/pgsql/data ##创建data存放目录
chown postgres:postgres /usr/local/pgsql/data ##给postgres用户授权
su - postgres ##切换到postgres用户(数据库的操作不允许使用root用户)
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data ##初始化数据库
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start ##启动数据库
/usr/local/pgsql/bin/createdb test ##创建test数据库
/usr/local/pgsql/bin/psql test ##连接test数据库

上面的配置一般只需调整路径即可

cd postgresql-16.3
./configure --prefix=/usr/local/postgresql --with-zstd --with-python --with-systemd
make
make install

安装好后位置数据库路径及日志路径

adduser postgres
mkdir /usr/local/postgresql/data
mkdir /usr/local/postgresql/log
chown postgres:postgres /usr/local/postgresql -R

初始化数据库

su - postgres
/usr/local/postgresql/bin/initdb -D /usr/local/postgresql/data

启动数据库

/usr/local/postgresql/bin/pg_ctl -D /usr/local/postgresql/data -l /usr/local/postgresql/log/server.log start

创建并连接数据库

/usr/local/postgresql/bin/createdb test 
/usr/local/postgresql/bin/psql test 

访问配置

上面完成后可以通过命令工具在服务器上访问数据库,但是无法通过工具在外网访问,需要进行下面的配置操作。
进入postgrelsql下的data目录,命令及目录结构如下:
image.png
base目录是表空间目录,global目录是相关全局变量目录, pg_hba.conf是访问控制配置文件,postgresql.conf是postgresql主配置文件。我们需要修改的配置文件为pg_hba.conf和postgresql.conf文件。
修改pg_hba.conf文件,拉到最下面,如下图所示修改:
image.png

pg_hba.conf文件是PostgreSQL数据库系统中的一个配置文件,用于定义客户端与服务器之间的连接规则。pg_hba代表 “host-based authentication”,即基于主机的身份验证。 在这个文件中,可以规定哪些主机地址、哪些用户、以及使用什么方法进行连接,以及是否需要密码等认证信息。这是PostgreSQL数据库管理安全连接的一个重要配置文件。

修改postgresql.conf文件,在展开到内容中找到“# - Connection Settings -”,如下图所示修改:
image.png
防火墙配置,对firewall或iptable进行策略配置,放通数据库访问端口5432。firewall的配置样例如下:

##以下命令在root账户下执行
firewall-cmd --zone=public --add-port=5432/tcp --permanent     ##配置防火墙放行5432端口
firewall-cmd --reload       ##防火墙重新加载配置文件

重启数据库

su - postgres
/usr/local/postgresql/bin/pg_ctl -D /usr/local/postgresql/data -l /usr/local/postgresql/log/server.log stop
/usr/local/postgresql/bin/pg_ctl -D /usr/local/postgresql/data -l /usr/local/postgresql/log/server.log start

配置数据库密码

/usr/local/postgresql/bin/psql      ##使用postgres用户连接默认postgres数据库;
ALTER USER postgres WITH PASSWORD 'postgres';     #修改数据库用户postgres的密码为postgres;

环境变量

目前使用命令仍需要使用全路径执行,为方便使用,配置环境变量。

vi /etc/profile
##将如下内容添加到文件末尾
PATH=/usr/local/postgresql/bin:$PATH
export PATH

##保存退出后执行刷新配置
source /etc/profile

##切换到postgres用户
su - postgres

##此时就可以直接执行psql命令了
psql

开机启动

方式一

PostgreSQL的开机自动启动脚本位于PostgreSQL源码目录下的contrib/start-scripts目录下:
image.png
其中linux文件为linux环境下的开机自启动脚本,将其拷贝到“/etc/init.d”目录下,并改名为postgresql:

cp linux /etc/init.d/postgresql

切换到/etc/init.d目录,使用vi打开postgresql文件修改如下内容:

#修改前:
#Installation prefix
prefix=/usr/local/pgsql

#修改后: 
#Intalllation prefix[2021-10-25]
prefix=/usr/local/postgresql

#修改前:
# Data directory
#PGDATA="/usr/local/pgsql/data"

#修改后:
# Data directory[2021-10-25]
PGDATA="/usr/local/postgresql/data"

# Who to run the postmaster as, usually "postgres".  (NOT "root")
# 将启动用户修改为实际用户,这里使用postgres,所以不变。
PGUSER=postgres

#修改前:
# Where to keep a log file
PGLOG="$PGDATA/serverlog"

#修改后:
# Where to keep a log flie[2021-10-25]
PGLOG="/usr/local/postgresql/log/server.log"

然后修改postgresql文件的执行权限:
chmod a+x postgresql
添加开机启动:
chkconfig --add postgresql
然后重启服务器开机验证即可。

方式二

编辑如下启动文件/lib/systemd/system/postgresql.service

[Unit]
Description=PostgreSQL database server
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
User=postgres
ExecStart=/usr/local/postgresql/bin/postgres -D /usr/local/postgresql/data
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=infinity

[Install]
WantedBy=multi-user.target

添加开机启动并现在启动
systemctl enable postgresql.service --now

posted on 2024-06-02 10:08  lzc_jack  阅读(215)  评论(0编辑  收藏  举报