准备工作
下载地址:https://www.postgresql.org/ftp/source/v16.3/
#挂载ISO
mount /dev/sr0 /mnt
df -h
#删除现有repo
cd /etc/yum.repos.d/
rm -rf *
#生成新的repo
cat >> /etc/yum.repos.d/centos.repo << "EOF"
[Centos7.9]
name=centos7.9
baseurl=file:///mnt
gpgcheck=0
EOF
#重新加载
yum repolist
#关闭selinux
sed -i 's/SELINUX\=enforcing/SELINUX\=disabled/g' /etc/selinux/config
setenforce 0
#放行5432端口
firewall-cmd --add-port=5432/tcp --permanent
#重启防火墙更新配置
firewall-cmd --reload
#验证
firewall-cmd --list-all
#安装依赖包
yum install -y make gcc gcc-c++ wget libicu-devel readline readline-devel zlib zlib-devel libxml2-devel libxslt-devel openssl-devel perl-devel python3 python3-devel initscripts
#下载源码包到指定目录
mkdir /data
cd /data
wget https:///pub/source/v16.3/postgresql-16.3.tar.gz --no-check-certificate
#添加用户和组
groupadd -g 1001 postgres
useradd -g 1001 -u 1001 -m postgres
#设置密码 a1!
passwd postgres
#创建目录
mkdir -p /data/postgresql/{pgdata,archive,scripts,backup,pg16,soft}
chown -R postgres:postgres /data
chmod -R 775 /data
#配置环境变量
su - postgres
vi ~/.bashrc
export PATH=/data/postgresql/pg16/bin:$PATH
export LD_LIBRARY_PATH=/data/postgresql/pg16/lib
export PGDATA=/data/postgresql/pgdata
source ~/.bashrc
- zlib-devel: 备份时使用的压缩功能
- readline-devel: 在psql中使用上下方向键把历史命令找出来
- libxml2-devel: 使用xml数据类型
- libxslt-devel: 使用libxslt
- openssl-devel: 支持使用SSL连接加警
- perl-devel: 使用Perl语言来开发
- python-devel: 使用Python语言来开发
编译安装
cd /data
tar -xvf postgresql-16.3.tar.gz
cd /data/postgresql-16.3
#编译 给编译的版本添加一个-mao的后缀
./configure --prefix=/data/postgresql/pg16 --with-per --with-python --with-libxml --with-libxslt --with-openssl --with-blocksize=32 --with-wal-blocksize=32 --with-wal-segsize=64 --with-extra-version="-mao"
#安装
make && make install
#创建软链接 方便后续升级
cd /data/postgresql
ln -s pg16/ ./pgsql
- --prefix: 指定安装目录为/data/postgresql/pg16
- --with-perl: 使用Perl语言来编写自定义函数,使用该项要先安装perl开发包(perl-devel)
- --with-python: 使用Python语言来编写自定义函数,使用该选项要先安装python-dev开发包(python-devel)
- --with-libxml: 使用xml数据类型,使用该选项要先安装python-dev开发包(libxml2-devel)
- --with-libxslt: 使用libxsit构建,启用xm12模块从而可以从xml到xsl的转换
PostgreSQL在数据仓库使用场景中,较大的数据块以提高IO性能
- --with-blocksize: 指定数据块为32KB,默认是8KB
- --with-wal-blocksize: 指定WAL日志块为32KB,默认是8KB
- --with-wal-segsize: 指定WAL日志文件为64MB,默认是16MB
初始化数据库
#初始化数据库 -W 表示输入数据库用户postgres的初始化密码 a1!
initdb -E UTF8 --locale "C" -W
#查看环境变量
env|grep pgdata
#启动数据库 将日志输出当当前路径的 logfile 文件内
pg_ctl -l logfile start
#登录数据库
psql
#配置远程登陆
vi /data/postgresql/pgdata/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
host all all 0.0.0.0/0 md5
host replication all 0.0.0.0/0 md5
cat >> /data/postgresql/pgdata/postgresql.conf <<"EOF"
listen_addresses = '*'
port=5432
unix_socket_directories='/data/postgresql/pgdata'
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%a.log'
log_truncate_on_rotation = on
EOF
- pgdata:数据目录
- pghost: 数据库主机或socket目录(默认:"本地接口")
- pgport:数据库服务器的端口(默认:"5432")
- pgdatabase: 指定要连接的数据库(默认:"postgres")
- pguser: 指定数据库用户名(默认:"postgres")
#查询已安装的插件
select * from pg_available_extensions;
#安装插件
su - postgres
cd /data/postgresql-16.3/contrib
make && make install
#安装路径
cd /data/postgresql/pgsql/share/extension/
ll
#登录数据库再次查询已安装的插件
su - postgres
psql
select * from pg_available_extensions;
设置开机自启动
#启停数据库 fast(默认,立即断开所有客户端连接) smart immediate(慎用,下次启动需要恢复)
pg_ctl -l logfile start
pg_ctl stop -m fast
#查看数据库状态
pg_ctl -l logfile status
#切换root用户复制配置文件并授权
su - root
cd /data/postgresql-16.3/contrib/start-scripts
cp linux /etc/init.d/postgres
chmod +x /etc/init.d/postgres
#修改数据文件存放路径
vi /etc/init.d/postgres
prefix=/data/postgresql/pg16
PGDATA="/data/postgresql/pgdata"
#root用户使用service命令启动
service postgres start
#查看端口状态
ss -ltn
#设置开机启动
chkconfig postgres on
#查看开机启动项
chkconfig --list
报错解决:添加软连接
#如果遇到以下报错:
error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: 没有那个文件或目录 Is the server running locally and accepting connections on that socket?
#添加软连接
systemctl stop postgres
ln -s /data/postgresql/pgdata/.s.PGSQL.5432 /tmp/.s.PGSQL.5432
systemctl start postgres
systemctl status postgres