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.pswp.cn/pingmian/71954.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/71954.shtml
英文地址,請注明出處:http://en.pswp.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的文件 主要做的事情有如下幾點: 展開頭文件展開宏條件編譯刪除注釋添加行號等信息保留…