postgresql安装部署文档
1.工具准备
1.1软件版本
postgresql 13.6
1.2下载地址
postgresql-13.6_x86.tar.gz
1.3机器配置
最低要求2核4G,50G硬盘。
硬件配置随数据规模和用户数扩充
2.系统安装
2.1 【超级用户】必备软件安装
rpm -ivh libtool-ltdl-2.4.2-22.el7_3.x86_64.rpm
yum -y install unixODBC
2.2. 【超级用户】删除postgres用户与用户组
ps -ef|grep postgres|grep -v grep|awk '{print $2}'|xargs kill -9
id postgres
userdel -r postgres
groupdel postgres
2.3. 【超级用户】删除postgres应用程序目录与数据目录,并重建
rm -rf /app/postgresapp
rm -rf /data/postgres
mkdir -p /app/postgresapp
mkdir -p /data/postgres
2.4 【超级用户】创建新用户和用户组
groupadd -g 1351 postgres
useradd -g 1351 -u 1351 -m -d /home/postgres -s /bin/bash postgres
chown -R postgres:postgres /app/postgresapp
chown -R postgres:postgres /data/postgres
2.5 【超级用户】app程序建立
-- 上传postgresql二进制文件包: postgresql-13.6.tar.gz 上传至
cd /home/postgres
tar xzvf postgresql-13.6.tar.gz
mv /home/postgres/postgresql-13.6 /app/postgresapp/
cd /app/postgresapp/
ln -s postgresql-13.6 postgresql
chown -R postgres:postgres /app/postgresapp/postgresql
chown -R postgres:postgres /app/postgresapp/postgresql-13.6
ll |grep postgres
2.6 【超级用户】启动脚本拷贝到对应位置
/bin/cp -f /app/postgresapp/postgresql-13.6/start-scripts/linux /etc/init.d/postgresql
chown -R postgres:postgres /etc/init.d/postgresql
chmod 740 /etc/init.d/postgresql
ll /etc/init.d/postgresql
2.7 【postgres用户】配置postgres的参数
su - postgres
cd ~
echo '
export PGHOME=/app/postgresapp/postgresql
export PGDATA=/data/postgres/13.6/data
export PGDATABASE=postgres
export PGUSER=postgres
export PGPORT=5432
export MANPATH=$PGHOME/share/man:$MANPATH
export LD_LIBRARY_PATH=$PGHOME/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export PATH=$PGHOME/bin:$PATH
' >> ~/.bash_profile
cat .bash_profile
2.8 【postgres用户】初始化数据库
2.8.1 产生一个存储初始化密码的文件
touch ~/initpasswd
echo "123456" >~/initpasswd
#sed -i '1a 123456' ~/initpasswd
cat ~/initpasswd
2.8.2 初始化数据库实例(密码 123456)
source /home/postgres/.bash_profile
initdb -D /data/postgres/13.6/data --pwfile=/home/postgres/initpasswd
2.9 【postgres用户】调整初始化参数
2.9.1 调整 pg_hba.conf
cat /data/postgres/13.6/data/pg_hba.conf
sed -i '$a host all all 0.0.0.0/0 md5' /data/postgres/13.6/data/pg_hba.conf
cat /data/postgres/13.6/data/pg_hba.conf
2.9.2 调整 监听 postgresql.conf
cat /data/postgres/13.6/data/postgresql.conf|grep listen_addresses
sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/" /data/postgres/13.6/data/postgresql.conf
cat /data/postgres/13.6/data/postgresql.conf|grep listen_addresses
cat /data/postgres/13.6/data/postgresql.conf|grep logging_collector
sed -i "s/#logging_collector = off/logging_collector = on/" /data/postgres/13.6/data/postgresql.conf
cat /data/postgres/13.6/data/postgresql.conf|grep logging_collector
cat /data/postgres/13.6/data/postgresql.conf|grep shared_buffers
sed -i "s/shared_buffers = 128MB/shared_buffers = 2048MB/g" /data/postgres/13.6/data/postgresql.conf
cat /data/postgres/13.6/data/postgresql.conf|grep shared_buffers
2.10 【超级用户】配置root 服务启动
exit
cat /etc/init.d/postgresql | grep "prefix=" && cat /etc/init.d/postgresql | grep "PGDATA="
sed -i 's!prefix=/usr/local/pgsql!prefix=/app/postgresapp/postgresql!' /etc/init.d/postgresql
sed -i 's!PGDATA="/usr/local/pgsql/data"!PGDATA="/data/postgres/13.6/data"!' /etc/init.d/postgresql
sed -i 's!PGUSER=postgres!PGUSER=postgres!' /etc/init.d/postgresql
cat /etc/init.d/postgresql | grep "prefix=" && cat /etc/init.d/postgresql | grep "PGDATA=" && cat /etc/init.d/postgresql| grep "PGUSER="
-- 为了使用开机自动启动时系统加载postgres用户的环境变量,需在启动shell中增加调用 /home/postgres/.bash_profile
sed -i '1a source /home/postgres/.bash_profile' /etc/init.d/postgresql
head /etc/init.d/postgresql |grep home
2.11 【超级用户】测试service 方式启动
2.11.1 测试root账号下的服务启动
service postgresql start
service postgresql stop
service postgresql start
service postgresql restart
2.11.2 配置自动启动
-- 配置后建议 reboot 测试进程是否启动
chkconfig --list postgresql
chkconfig --add postgresql
chkconfig --list postgresql
chkconfig --level 35 postgresql on
chkconfig --list postgresql
2.11.3 【略】测试postgres账号下的服务启动(需要输入OS端 postgres用户的密码)
su - postgres
service postgresql start
service postgresql stop
service postgresql start
service postgresql restart
exit
3. 增加oracle_fdw扩展
3.1 将oracle11g的客户端包拷贝到/home/postgres目录
3.2 【root账号】解压并调整oracle client 属主
cd /home/postgres
unzip instantclient-basic-linux.x64-11.2.0.4.0.zip
unzip instantclient-sdk-linux.x64-11.2.0.4.0.zip
unzip instantclient-sqlplus-linux.x64-11.2.0.4.0.zip
mkdir -p /app/oracle
mv instantclient_11_2 /app/oracle
cd /app/oracle
ll
-- 必须加上这句,否者make时报错
ln -s /app/oracle/instantclient_11_2/libclntsh.so.11.1 /app/oracle/instantclient_11_2/libclntsh.so
chown -R postgres:postgres /app/oracle/instantclient_11_2/
ll /app/oracle/instantclient_11_2/
3.3 【postgres账号】修改postgres的配置
su - postgres
echo '
ORACLE_SID=orcl; export ORACLE_SID
ORACLE_BASE=/app/oracle/instantclient_11_2; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE; export ORACLE_HOME
LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH
PATH=$ORACLE_HOME:$ORACLE_HOME/bin:$PATH; export PATH
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
' >> ~/.bash_profile
cat .bash_profile
3.4 重启postgresql数据库
source ~/.bash_profile
cd $PGDATA
pg_ctl -D $PGDATA -l logfile restart
4. 调整备份方面参数增加归档并调整内存参数
4.1 调整内存参数
sed -n '/shared_buffers.*=.*/p' $PGDATA/postgresql.conf
#sed -i "s/^.*shared_buffers.*=.*$/shared_buffers = 16384MB/" $PGDATA/postgresql.conf
sed -n '/shared_buffers.*=.*/p' $PGDATA/postgresql.conf
4.2 调整备份与归档方面参数
4.2.1 参数文件调整,开启归档、复制(复制与复制sender数量>0)和写入归档命令
cat $PGDATA/postgresql.conf |grep wal_level && cat $PGDATA/postgresql.conf |grep archive_mode
sed -i 's/#wal_level = minimal/wal_level = replica/g' $PGDATA/postgresql.conf
sed -i 's/#archive_mode = off/archive_mode = on/g' $PGDATA/postgresql.conf
cat $PGDATA/postgresql.conf |grep wal_level && cat $PGDATA/postgresql.conf |grep archive_mode
cat $PGDATA/postgresql.conf |grep archive_command
sed -i "s/#archive_command = ''/archive_command = /" $PGDATA/postgresql.conf
sed -i "s#archive_command = #archive_command = '\`test ! -f ../archivelog-active || cp -i %p ../archive\`'#g" $PGDATA/postgresql.conf
cat $PGDATA/postgresql.conf |grep archive_command
cat $PGDATA/postgresql.conf |grep wal_level && \
cat $PGDATA/postgresql.conf |grep archive_mode && \
cat $PGDATA/postgresql.conf |grep archive_command
4.2.2 允许复制的参数调整
cat $PGDATA/postgresql.conf |grep max_wal_senders
sed -i 's/#max_wal_senders = 0/max_wal_senders = 5/g' $PGDATA/postgresql.conf
cat $PGDATA/postgresql.conf |grep max_wal_senders
4.2.3 允许网络复制的安全参数调整
tail -10 $PGDATA/pg_hba.conf
sed -i '$a\host replication postgres 0.0.0.0/0 md5' $PGDATA/pg_hba.conf
cat $PGDATA/pg_hba.conf |grep replication
4.2.4 检查所有参数调整
cat $PGDATA/postgresql.conf |grep wal_level && \
cat $PGDATA/postgresql.conf |grep archive_mode && \
cat $PGDATA/postgresql.conf |grep archive_command && \
cat $PGDATA/postgresql.conf |grep max_wal_senders
cat $PGDATA/pg_hba.conf |grep replication
4.3 postgres用户建立归档触发文件并重启开启归档功能
cd $PGDATA
mkdir ../archive
touch ../archivelog-active
pg_ctl restart -D $PGDATA -l logfile
4.4 重启测试归档是否正常
ll ../archive
pg_ctl restart -D $PGDATA -l logfile
ll ../archive
4.5 之后禁止psql 本地无密码登录
sed -i "s/trust/md5/" $PGDATA/pg_hba.conf
cat $PGDATA/pg_hba.conf
pg_ctl reload
5. 建立标准模板库(带postgis/oracle_fdw扩展)
5.1 建立标准库
export PGPASSWORD="123456"
psql
create database gis_template;
\c gis_template
CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology;
CREATE EXTENSION oracle_fdw;
CREATE EXTENSION "uuid-ossp";
create extension postgres_fdw;
\q
6. 其他补充
6.1 应修改超级用户密码为更安全的密码
export PGPASSWORD="123456"
export PGUSER=postgres
psql
alter user postgres with password 'xxxxxxxxx';
6.2 配置pg_stat_statements 用于性能分析
6.2.1 修改参数文件
sed -n '/shared_preload_libraries/p' $PGDATA/postgresql.conf
sed -i "s/#shared_preload_libraries = ''/#shared_preload_libraries = 'pg_stat_statements'/g" $PGDATA/postgresql.conf
sed -n '/shared_preload_libraries/p' $PGDATA/postgresql.conf
sed -n '/track_io_timing/p' $PGDATA/postgresql.conf
sed -i "s/#track_io_timing = off/track_io_timing = on/g" $PGDATA/postgresql.conf
sed -n '/track_io_timing/p' $PGDATA/postgresql.conf
sed -n '/track_activity_query_size/p' $PGDATA/postgresql.conf
sed -i "s/#track_activity_query_size = 1024/track_activity_query_size = 2048/g" $PGDATA/postgresql.conf
sed -n '/track_activity_query_size/p' $PGDATA/postgresql.conf
sed -n '/port = 5432/p' $PGDATA/postgresql.conf
sed -i "s/#port = 5432/port = 5432/g" $PGDATA/postgresql.conf
sed -n '/port = /p' $PGDATA/postgresql.conf
6.2.2 重启数据库
6.2.3 创建扩展
CREATE EXTENSION pg_stat_statements;