openEuler 22.03 LTS SP3安装过程请参考官方文档:安装指导
1 安装必要的依赖 |
#yum install -y readline-devel |
2下载postgresql-15.0源码 |
$wget https://ftp.postgresql.org/pub/source/v15.0/postgresql-15.0.tar.gz |
或提前下载postgresql-15.0.tar.gz程序包,sftp上传到/sda2/目录下 |
$ tar -xzvf postgresql-15.0.tar.gz |
3配置(环境依赖检查) |
$ cd postgresql-15.0/ |
# 进行环境依赖检查 |
$ ./configure |
4编译安装 |
#使用4个并发编译 |
$make -j4 |
#编译完成安装postgresql15.0 |
#make install |
5创建用户和用户组 |
# groupadd postgres |
# useradd -g postgres postgres |
# passwd postgres |
更改用户 postgres 的密码 。 |
新的密码:******* |
重新输入新的密码:******* |
passwd:所有的身份验证令牌已经成功更新。 |
6初始化数据库 |
6.1 创建数据目录 |
# mkdir /sda2/pgsql/data |
# chown postgres /sda2/pgsql/data |
6.2切换到postgres操作系统用户 |
# su - postgres |
6.3初始化PostgreSQL数据库 |
#/usr/local/pgsql/bin/initdb -D /sda2/pgsql/data |
# 此处使用绝对路径,也可用相对路径来操作。 |
# -D:database cluster的主目录 |
# -U:指定超级用户 |
# -W:指定用户密码 |
# -E:指定数据库字符编码 |
# 最简化的方式初始化数据库 |
/usr/local/pgsql/bin/initdb -D /sda2/pgsql/data |
# --waldir:指定wal日志路径 |
/usr/local/pgsql/bin/initdb -D /sda2/pgsql/data -U postgres -E utf8 --waldir=/sda2/pgsql/data/pgwal |
pgsql-修改默认密码 |
#修改PGSQL数据库密码--(注意密码需要用单引号括起来,用户名不用) |
ALTER USER postgres WITH PASSWORD '*******'; |
#提示以下内容表示修改成功 |
ALTER ROLE |
6.4启动PostgreSQL数据库 |
#/usr/local/pgsql/bin/pg_ctl -D /sda2/pgsql/data -l logfile start |
启动报错,没有权限 (若启动未遇到报错,请跳过此步骤) |
[postgres@~ /]$ /usr/local/pgsql/bin/pg_ctl -D /sda2/pgsql/data -l logfile start |
waiting for server to start..../bin/sh:行1: logfile: Permission denied |
stopped waiting |
pg_ctl: could not start server |
Examine the log output. |
查询pgsql日志 |
cat /home/pgsql/logfile |
2024-01-11 13:01:31.369 CST [89959] FATAL: data directory "/sda2/pgsql/data" has invalid permissions |
2024-01-11 13:01:31.369 CST [89959] DETAIL: Permissions should be u=rwx (0700) or u=rwx,g=rx (0750). |
2024-01-11 13:07:13.811 CST [90123] FATAL: data directory "/sda2/pgsql/data" has invalid permissions |
2024-01-11 13:07:13.811 CST [90123] DETAIL: Permissions should be u=rwx (0700) or u=rwx,g=rx (0750). |
根据日志提示发现pgsql数据文件目录权限不足 |
#su - root |
#添加目录权限 |
#pgsql程序目录 |
sudo chown -R postgres:postgres /usr/local/pgsql |
sudo chmod -R 755 /usr/local/pgsql/ |
#pgsql数据文件目录 |
sudo chown -R postgres:postgres /sda2/pgsql/data |
sudo chmod -R 755 /sda2/pgsql/data |
sudo chmod -R 700 /sda2/pgsql/data |
#/sda2/pgsql/data需要赋予(0700)权限,设置之后,启动正常! |
2024-01-11 13:07:13.811 CST [90123] FATAL: data directory "/sda2/pgsql/data" has invalid permissions |
2024-01-11 13:07:13.811 CST [90123] DETAIL: Permissions should be u=rwx (0700) or u=rwx,g=rx (0750). |
[postgres@ ~]$ /usr/local/pgsql/bin/pg_ctl -D /sda2/pgsql/data -l logfile start |
waiting for server to start.... done |
server started |
6.5查看pgsql服务端口号 |
[postgres@ ~]$ lsof -i:5432 |
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME |
postgres 3713 postgres 5u IPv6 38207 0t0 TCP localhost:postgres (LISTEN) |
postgres 3713 postgres 6u IPv4 38208 0t0 TCP localhost:postgres (LISTEN) |
6.6使用psql连接pgsql数据库; |
[postgres@ ~]$ /usr/local/pgsql/bin/psql |
psql (15.0) |
Type "help" for help. |
postgres=# select datname from pg_database; |
datname |
----------- |
postgres |
template1 |
template0 |
(3 rows) |
#查询 PostgreSQL(pgsql)的运行状态 |
SELECT * FROM pg_stat_activity; |
7配置防火墙 开启pgsql5432服务端口 |
#启动防火墙并让其自动启动: |
# sudo systemctl enable firewalld |
检查防火墙运行状态 |
# sudo firewall-cmd --state |
running |
#开启5432端口 |
#firewall-cmd --zone=public --add-port=5432/tcp --permanent |
success |
#添加5432端口(方式2) |
#iptables -I INPUT -p tcp --dport 5432 -j ACCEPT |
#重启防火墙配置: |
#firewall-cmd --reload |
(systemctl restart iptables.service ) |
#查询服务端口开放情况 |
[root@ ~]# firewall-cmd --list-all |
5432/tcp |
8配置PostgreSQL远程连接: |
# cd /sda2/pgsql/data |
# vi pg_hba.conf |
在列表最后添加: host all all 0.0.0.0/0 md5 # "local" is for Unix domain socket connections only |
local all all trust |
# IPv4 local connections: |
host all all 127.0.0.1/32 trust |
host all all 0.0.0.0/0 md5 |
# vi postgresql.conf |
#查看参数文件位置 |
show config_file; |
#修改以下参数值: |
shared_buffers=4GB #默认128MB一般推荐为内存的四分之一,不超过总内存的二分之一; |
max_parallel_workers=20 #CPU并行参数,默认设置 |
log_statement = 'ddl' #仅记录对数据库表结构的修改; |
log_min_duration_statement = 2000 #慢sql参数 |
———————————————— |
#重启pgsql数据库 |
/usr/local/pgsql/bin/pg_ctl -D /sda2/pgsql/data -l logfile restart |
#重新加载pgsql配置参数; |
SELECT pg_reload_conf(); |
#查询 PostgreSQL 数据库配置参数 |
SELECT name, setting FROM pg_settings; |
在PC端测试连接PostgreSQL数据库(略) |
9安装PostgreSQL后的操作系统配置 |
9.1 以管理员的身份配置/etc/profile |
在/etc/profile.d目录下新增postgresql.sh文件,内容如下 |
[root@~ profile.d]# cat postgresql.sh |
export PATH=$PATH:/usr/local/pgsql/bin |
9.2设置开机自动启动PostgreSQL |
(a)创建启动文件 |
在/usr/lib/systemd/system下创建文件postgresql.service |
内容如下: |
# vim postgresql.service |
[Unit] |
Description=PostgreSQL database server |
After=network.target |
[Service] |
Type=forking |
User=postgres |
Group=postgres |
OOMScoreAdjust=-1000 |
Environment=PGDATA=/sda2/pgsql/data |
Environment=PGPORT=5432 |
ExecStart=/usr/local/pgsql/bin/pg_ctl start -D ${PGDATA} -l ${PGDATA}/logfile -s -o "-p ${PGPORT}" -w -t 300 |
ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D ${PGDATA} -l ${PGDATA}/logfile -s -m fast |
ExecReload=/usr/local/pgsql/bin/pg_ctl reload -D ${PGDATA} -l ${PGDATA}/logfile -s |
TimeoutSec=300 |
[Install] |
WantedBy=multi-user.target |
(b)设置开机自动启动 |
# chmod a+x postgresql.service |
# systemctl enable postgresql.service |
# systemctl start postgresql.service |
10创建数据库;
create database database_name encoding='UTF8';
11保存参数配置并重启openEuler
#reboot -n