PostgreSQL 18 于前几个小时刚刚发布,来个一键安装(Ubuntu 20.0)
一键安装脚本,全自动编译安装,两个实例的安装pg1800和pg1900也只是1分钟的事,自定义各级目录,干净清晰。
前两天群里竟然还有人推崇apt/yum安装,说是统一规范,apt/yum安装出来的目录结构乱七八的,反规范吧,难道是那个人不会编译安装?
源码包地址:https://ftp.postgresql.org/pub/source/v18.0/postgresql-18.0.tar.gz
自动安装脚本
[code]#!/bin/bash# 1,PostgreSQL源码包名称(假设已下载并位于当前目录的同级目录中)POSTGRESQL_SRC="postgresql-18.0.tar.gz" # 替换XX.X为你的PostgreSQL版本POSTGRESQL_DIR="postgresql-18.0" # 解压后的目录名,同样替换XX.X# 2,安装目录INSTALL_DIR="/usr/local/pgsql18/server"# 3,端口号PORT=1800# 4,初始密码(通过参数传入,默认为空)INIT_PASSWORD="postgres_init_pwd"if [ $# -gt 0 ]; then INIT_PASSWORD="$1"fi# 实例目录INSTANCE_DATA_DIR="/usr/local/pgsql18/pg${PORT}/data"INSTANCE_LOG_DIR="/usr/local/pgsql18/pg${PORT}/log"# 创建postgres用户(如果尚未存在)if ! id postgres &>/dev/null; then echo "Creating postgres user..." sudo groupadd postgres sudo useradd -m -g postgres postgres -s /bin/bash echo " ostgres user created successfully."else echo " ostgres user already exists."fi# 检查目录是否存在if [ ! -d "$INSTALL_DIR" ]; then echo "dir '$INSTALL_DIR' not existing,creating..." mkdir -p "$INSTALL_DIR" echo "dir '$INSTALL_DIR' created"else echo "dir '$INSTALL_DIR' existing"fi# 检查实例目录是否存在if [ ! -d "$INSTANCE_DATA_DIR" ]; then echo "dir '$INSTANCE_DATA_DIR' not existing,creating..." mkdir -p "$INSTANCE_DATA_DIR" mkdir -p "$INSTANCE_LOG_DIR" echo "dir '$INSTANCE_DATA_DIR' created"else echo "dir '$INSTANCE_DATA_DIR' existing"fi# 安装编译依赖项echo "############################Installing build dependencies... "sudo apt update -y > /dev/null 2>&1sudo apt install -y systemtap-sdt-dev libicu-dev libreadline-dev zlib1g-dev libssl-dev libpam0g-dev libxml2-dev libxslt1-dev libldap2-dev libsystemd-dev tcl-dev libpython3-dev libperl-dev libicu-dev pkg-config > /dev/null 2>&1echo "############################Done."# 解压源码包echo "############################Extracting PostgreSQL source code... "tar -xzvf "$POSTGRESQL_SRC" > /dev/null 2>&1echo "############################Done."# 进入解压后的目录cd "$POSTGRESQL_DIR"# 配置PostgreSQL(这里使用默认配置,但可以添加--prefix等选项)echo "############################Configuring PostgreSQL... "#make clean./configure --prefix="$INSTALL_DIR" --with-openssl > /dev/null 2>&1echo "############################Done."# 编译PostgreSQLecho -n "############################Compiling PostgreSQL (this may take a while)... "# pg 17之前,用make world -j$(nproc) > /dev/null 2>&1make world-bin -j$(nproc) > /dev/null 2>&1echo "############################Done."# 安装PostgreSQLecho "############################Installing PostgreSQL... "# pg 17之前,用make install-world > /dev/null 2>&1sudo make install-world-bin > /dev/null 2>&1echo "############################Done."# 初始化数据库(使用postgres用户)echo "############################Initializing PostgreSQL database..."chown -R postgres:postgres $INSTALL_DIRchmod 700 -R $INSTALL_DIRchown -R postgres:postgres $INSTANCE_DATA_DIRchmod 700 -R $INSTANCE_DATA_DIRchown -R postgres:postgres $INSTANCE_LOG_DIRchmod 700 -R $INSTANCE_LOG_DIRsudo -u postgres $INSTALL_DIR/bin/initdb -D $INSTANCE_DATA_DIR# 1. 创建systemd服务(使用指定模板)echo "############################Creating systemd service..."cat |