postgresql14编译安装脚本

#!/bin/bash####################################readme###################################
#先上传postgresql源码包,再配置yum源,然后执行脚本
#备份官方yum源配置文件:
#cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
#下载阿里云yum源配置文件:
#curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#清除缓存生产新的缓存
#yum clean all
#yum makecache
#############################################################################set -euo pipefail  # 启用严格错误检查#============================= 全局配置 =============================#
export MY_SERVER_IP="172.16.1.11"       # 本机服务器IP
export MY_HOSTNAME="testdb"        # 主机名
export MY_SOFT_BASE="/opt"               # 软件包存储根目录
export PG_SOFT="postgresql-14.16.tar.gz" # PG源码包名称
export PG_VERSION="14.16"                # PG版本号
export MY_PG_HOME="/pgccc"               # PG根目录
export PGDATA="${MY_PG_HOME}/pgdata"     # 数据目录
export PGHOME="${MY_PG_HOME}/pgsql"      # 安装目录
export LOG_FILE="/var/log/pg_install.log" # 安装日志文件#============================= 函数定义 =============================#
init_logging() {exec > >(tee -a "$LOG_FILE") 2>&1echo "[$(date '+%F %T')] 开始执行PostgreSQL安装脚本"
}validate_environment() {echo "验证安装包..."local pg_soft_path="${MY_SOFT_BASE}/${PG_SOFT}"[[ -f "$pg_soft_path" ]] || { echo "错误:未找到PostgreSQL源码包 $pg_soft_path"; exit 1; }
}install_dependencies() {echo "安装系统依赖..."local deps=(openssl openssl-devel pam pam-devel libxml2 libxml2-devellibxslt libxslt-devel perl perl-devel python-devel perl-ExtUtils-Embedreadline readline-devel bzip2 zlib zlib-devel ntp ntpdategettext gettext-devel bison flex gcc gcc-c++ boost-develgmp-devel mpfr-devel libevent-devel libpython3.6m)yum install -y "${deps[@]}" || { echo "依赖安装失败"; exit 1; }
}security_settings() {# 关闭防火墙
systemctl stop firewalld.service  >/dev/null 2>&1
systemctl disable firewalld.service  >/dev/null 2>&1 # SELinux配置if [[ $(getenforce) != "Disabled" ]]; thensed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/configsetenforce 0echo "SELinux已设置为宽松模式"fi
}create_pg_user() {if ! id postgres &>/dev/null; thengroupadd -g 70000 postgresuseradd -u 70000 -g postgres -m -s /bin/bash postgresecho "postgres:postgres" | chpasswdecho "已创建postgres用户"fi
}setup_directories() {local dirs=("$MY_PG_HOME"/{pgdata,archive,scripts,backup,pgsql,soft})mkdir -p "${dirs[@]}"chown -R postgres:postgres "$MY_PG_HOME"chmod 2750 "$MY_PG_HOME"  # 设置SGID位保持组权限echo "目录结构已创建"
}configure_env() {local profile="/home/postgres/.bashrc"cat > "$profile" <<EOF
export LANG=en_US.UTF-8
export PGPORT=5432
export PGDATA=$PGDATA
export PGHOME=$PGHOME
export PATH=\$PGHOME/bin:\$PATH
export PGUSER=postgres
export PGDATABASE=postgres
PS1='[\u@\h \W]\$ '
EOFchown postgres:postgres "$profile"
}compile_pg() {local src_dir="${MY_PG_HOME}/soft/postgresql-${PG_VERSION}"local build_dir="${MY_PG_HOME}/build"# 解压源码tar -zxvf "${MY_SOFT_BASE}/${PG_SOFT}" -C "${MY_PG_HOME}/soft"# 编译安装mkdir -p "$build_dir"chown postgres:postgres "$build_dir"su - postgres -c "cd '$build_dir' &&'${src_dir}/configure' \--prefix='$PGHOME' \--with-openssl \--with-libxml \--with-libxslt &&make -j$(nproc) &&make install" || { echo "编译安装失败"; exit 1; }
}init_db() {su - postgres -c "initdb --encoding=UTF8 --locale=en_US.utf8 --username=postgres --pwfile=<(echo 'postgres')" || { echo "数据库初始化失败"; exit 1; }# 配置参数cat >> "$PGDATA/postgresql.conf" <<EOF
listen_addresses = '*'
port = 5432
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%a.log'
log_truncate_on_rotation = on
shared_preload_libraries = 'pg_stat_statements'
max_connections = 100
shared_buffers = 128MB
work_mem = 4MB
EOF# 配置访问控制cat > "$PGDATA/pg_hba.conf" <<EOF
local   all             all                     trust
host    all             all     127.0.0.1/32    trust
host    all             all     $MY_SERVER_IP/32 md5
host    replication     all     0.0.0.0/0       md5
EOF
}start_service() {cat > /etc/systemd/system/postgresql.service <<EOF
[Unit]
Description=PostgreSQL database server
After=network.target[Service]
Type=notify
User=postgres
ExecStart=$PGHOME/bin/postgres -D $PGDATA
ExecReload=/bin/kill -HUP \$MAINPID
KillMode=mixed[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reloadsystemctl enable postgresql --now
}#============================= 主执行流程 =============================#
main() {init_loggingvalidate_environmentinstall_dependenciescreate_pg_usersetup_directoriesconfigure_envcompile_pginit_dbstart_serviceecho "安装完成!数据库已启动"echo "连接命令:psql -h $MY_SERVER_IP -U postgres"
}main "$@"

遇到问题:

编译安装完成后,启动时报错

pg_ctl restart
waiting for server to shut down.... done
server stopped
waiting for server to start....2024-03-28 10:24:59.830 CST [14206] FATAL: could not access file "pg_stat_statements": No such file or directory
2024-03-28 10:24:59.830 CST [14206] LOG: database system is shut downstopped waiting
pg_ctl: could not start server
Examine the log output.

问题处理:

--进入到contrib目录中,再进入到安装包pg_stat_statements目录

cd  contrib/pg_stat_statements/

--直接进行编译安装报错

[pgsql@test:/opt/postgresql-14.16/contrib/pg_stat_statements]$ make && make install
Makefile:33: /contrib/contrib-global.mk: No such file or directory
make: *** No rule to make target '/contrib/contrib-global.mk'. Stop.

--参考官网后执行以下命令编译安装

[pgsql@test:/opt/postgresql-14.16/contrib/pg_stat_statements]$ make USE_PGXS=1&& make USE_PGXS=1 install

--编译安装完成后再次启动数据库

pg_ctl start
waiting for server to start....2024-03-28 10:43:57.642 CST [14578] LOG: redirecting log output to logging collector process
2024-03-28 10:43:57.642 CST [14578] HINT: Future log output will appear in directory "log".done
server started

--创建插件

[pgsql@test:/home/postgres]$psql -h127.0.0.1 -Upostgres
psql (15.0)
Type "help" for help.
postgres=# create extension pg_stat_statements;
CREATE EXTENSION
postgres=# alter system set shared_preload_libraries = 'pg_stat_statements';
ALTER SYSTEM

--查询结果成功

postgres=# select count(*) from pg_stat_statements;count 
-------2
(1 row)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/71954.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI开发利器:miniforge3无感平替Anaconda3

相信有和我遭遇一样的同学吧&#xff0c;之前装了anaconda用的挺好的&#xff08;可以参考AI开发利器&#xff1a;Anaconda&#xff09;&#xff0c;但是考虑到有可能收到软件侵权的律师函的风险&#xff0c;还是果断找个替代品把anaconda卸载掉。miniforge就是在这样的背景下发…

Reactor中的Flux和Mono的区别

Reactor中的Flux和Mono的区别 在Reactor框架中&#xff0c;Flux 和 Mono 是两个核心的类型&#xff0c;分别用于处理不同的数据流场景。理解它们之间的区别是掌握响应式编程的关键。 1. 基本概念 Flux: 表示一个异步、非阻塞的流&#xff0c;能够发布零个或多个元素。它适用于…

AI-NAS:当存储遇上智能,开启数据管理新纪元

在数据爆炸的时代&#xff0c;NAS&#xff08;网络附加存储&#xff09;已成为个人和企业存储海量数据的利器。然而&#xff0c;面对日益庞大的数据量&#xff0c;传统的NAS系统在文件管理和搜索效率上逐渐力不从心。AI-NAS应运而生&#xff0c;它将NAS与人工智能&#xff08;A…

用 Vue 3.5 TypeScript 做了一个日期选择器(改进版)

上一篇 已经实现了一个日期选择器&#xff0c;只不过是模态窗的形式&#xff0c;这个版本改为文本框弹出&#xff0c;点击空白处可关闭日历 代码也增加了不少 <template><div><!-- 添加文本框 --><div class"date-picker-input-wrapper">&l…

【09】单片机编程核心技巧:变量赋值,从定义到存储的底层逻辑

【09】单片机编程核心技巧&#xff1a;变量赋值&#xff0c;从定义到存储的底层逻辑 &#x1f31f; 核心概念 单片机变量的定义与赋值是程序设计的基础&#xff0c;其本质是通过 RAM&#xff08;随机存储器&#xff09; 和 ROM&#xff08;只读存储器&#xff09; 的协作实现…

【爬虫】开篇词

一、网络爬虫概述 二、网络爬虫的应用场景 三、爬虫的痛点 四、需要掌握哪些技术&#xff1f; 在这个信息爆炸的时代&#xff0c;如何高效地获取和处理海量数据成为一项核心技能。无论是数据分析、商业情报、学术研究&#xff0c;还是人工智能训练&#xff0c;网络爬虫&…

文字转语音chat-tts-ui

去年已经使用过chattts了&#xff0c;但是昨晚想用的时候却记怎么打开了&#xff0c;找了一下以前的笔记 MacOS 下源码部署chat-tts-ui 配置好 python3.9-3.11 环境,安装git &#xff0c;执行命令 brew install libsndfile git python3.10 继续执行 brew install ffmpeg ​ …

基于SpringBoot+Vue的瑜伽课体验课预约系统【附源码】

基于SpringBootVue的瑜伽课体验课预约系统 一、系统技术说明二、运行说明三、系统的演示四、系统的核心代码演示 一、系统技术说明 框架&#xff1a;SpringbootVue 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软…

sparkTTS window 安装

SparkTTS 的简介 Spark-TTS是一种基于SpardAudio团队提出的 BiCodec 构建的新系统&#xff0c;BiCodec 是一种单流语音编解码器&#xff0c;可将语音策略性地分解为两种互补的标记类型&#xff1a;用于语言内容的低比特率语义标记和用于说话者特定属性的固定长度全局标记。这种…

从零开始:使用 Python 实现机器学习的基础与实践

文章大纲&#xff1a; 引言 机器学习的定义与应用场景。Python 在机器学习领域的优势。本文目标&#xff1a;通过 Python 实现一个简单的机器学习项目。 环境准备 安装 Python 和必要的库&#xff08;如 NumPy、Pandas、Scikit-learn&#xff09;。使用 Jupyter Notebook 或 V…

ApoorvCTF Rust语言逆向实战

上周参加了国外的比赛&#xff0c;名称叫&#xff1a;ApoorvCTF 看一下老外的比赛跟我们有什么不同&#xff0c;然后我根据国内比赛对比发现&#xff0c;他们考点还是很有意思的&#xff0c;反正都是逆向&#xff0c;哈哈哈 Rusty Vault 题目描述&#xff1a; In the heart…

Git和GitHub基础教学

文章目录 1. 前言2. 历史3. 下载安装Git3.1 下载Git3.2 安装Git3.3 验证安装是否成功 4. 配置Git5. Git基础使用5.1 通过Git Bash使用5.1.1 创建一个新的仓库。5.1.1.1 克隆别人的仓库5.1.1.2 自己创建一个本地仓库 5.1.2 管理存档 5.2 通过Visual Studio Code使用 6. Git完成远…

MySQL中like模糊查询如何优化?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL中like模糊查询如何优化?】面试题。希望对大家有帮助&#xff1b; MySQL中like模糊查询如何优化? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 MySQL 中&#xff0c;LIKE 模糊查询虽然非常常见&#xff0c;…

⭐LeetCode(数学分类) 2. 两数相加——暴力与优化⭐

⭐LeetCode(数学分类) 2. 两数相加——暴力与优化⭐ 提示&#xff1a; 每个链表中的节点数在范围 [1, 100] 内 0 < Node.val < 9 题目数据保证列表表示的数字不含前导零 题解&#xff1a; 暴力与优化&#xff0c;暴力即转换为十进制解题&#xff0c;优化即直接在链表上进…

①Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网

Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网https://item.taobao.com/item.htm?ftt&id784749793551 MODBUS TCP 通信单元 MODBUS TCP 转 RS485 MS-A1-50X1 系列概述 MS-A1-50X1 系列概述 MS-A1-50X1系列作为MODBUS TCP通信的服务器进行动作。可通…

基于PyTorch的深度学习——机器学习3

激活函数在神经网络中作用有很多&#xff0c;主要作用是给神经网络提供非线性建模能力。如果没有激活函数&#xff0c;那么再多层的神经网络也只能处理线性可分问题。 在搭建神经网络时&#xff0c;如何选择激活函数&#xff1f;如果搭建的神经网络层数不多&#xff0c;选择si…

力扣:找到一个数字的 K 美丽值(C++)

一个整数 num 的 k 美丽值定义为 num 中符合以下条件的 子字符串 数目&#xff1a; 子字符串长度为 k 。子字符串能整除 num 。 给你整数 num 和 k &#xff0c;请你返回 num 的 k 美丽值。 注意&#xff1a; 允许有 前缀 0 。0 不能整除任何值。 一个 子字符串 是一个字符串里…

C/C++蓝桥杯算法真题打卡(Day3)

一、P8598 [蓝桥杯 2013 省 AB] 错误票据 - 洛谷 算法代码&#xff1a; #include<bits/stdc.h> using namespace std;int main() {int N;cin >> N; // 读取数据行数unordered_map<int, int> idCount; // 用于统计每个ID出现的次数vector<int> ids; …

<建模软件安装教程1>Blender4.2系列

Blender4.2安装教程 0注意&#xff1a;Windows环境下安装 第一步&#xff0c;百度网盘提取安装包。百度网盘链接&#xff1a;通过网盘分享的文件&#xff1a;blender.zip 链接: https://pan.baidu.com/s/1OG0jMMtN0qWDSQ6z_rE-9w 提取码: 0309 --来自百度网盘超级会员v3的分…

C语言八股---预处理,编译,汇编与链接篇

前言 从多个.c文件到达一个可执行文件的四步:   预处理–>编译–>汇编–>链接 预处理 预处理过程就是预处理器处理这些预处理指令(要不然编译器完全不认识),最终会生成 main.i的文件 主要做的事情有如下几点: 展开头文件展开宏条件编译删除注释添加行号等信息保留…