在UnionTech OS Server 20 (统信UOS服务器版) 上离线安装PostgreSQL (pgsql) 数据库

发布于:2025-09-09 ⋅ 阅读:(21) ⋅ 点赞:(0)

在UnionTech OS Server 20 (统信UOS服务器版) 上离线安装PostgreSQL (pgsql) 数据库

源码编译安装
后续公共配置
配置认证方式
修改pg_hba.conf
启用远程连接
修改postgresql.conf
设置环境变量
启动PostgreSQL服务
修改管理员密码
获取PostgreSQL源码包
安装编译依赖工具
解压源码并编译
创建postgres用户
初始化数据库目录
UnionTech OS Server 20
离线安装PostgreSQL
选择安装方法
安装完成验证

下面是安装方式的详细步骤和一些注意事项。

离线安装PostgreSQL数据库

🔧 方法一:源码编译安装

这种方法适合需要自定义安装路径、编译选项或特定版本的场景。

  1. 获取源码包及依赖

    • 在一台能上网的机器上,从PostgreSQL官网(https://www.postgresql.org/ftp/source/ )下载你所需版本的源码包(例如 postgresql-14.3.tar.gz)。
    • 同时,务必下载或准备编译所需的依赖库,例如 gcc, gcc-c++, readline-devel, zlib-devel 等。这些也需要以RPM等方式下载并离线安装。获取这些依赖的方式可参考方法一中的 --downloadonly
    • 将源码包和依赖库的RPM包上传到离线服务器。
  2. 安装编译依赖

    • 安装之前下载的编译所需的依赖RPM包:
      # 进入存放依赖包的目录
      cd /path/to/dependency/rpms
      rpm -ivh --force --nodeps *.rpm
      # 或者使用yum本地安装(若yum配置允许)
      # yum localinstall *.rpm
      
  3. 编译安装PostgreSQL

    • 解压源码包并进入目录:
      tar -xvf postgresql-14.3.tar.gz -C /home/postgres/
      cd /home/postgres/postgresql-17.5
      
    • 配置编译选项。--prefix 指定安装目录:
      ./configure --prefix=/home/pgsql --without-readline # 如果readline库有问题可用--without-readline跳过
      
    • 编译并安装:
      make
      make install
      
      这个过程可能需要一些时间。

⚙️ 公共配置步骤

无论通过哪种方式安装,后续的数据库初始化和管理配置都是类似的。

  1. 创建postgres用户 (如果安装过程没有自动创建)

    groupadd -g 2000 postgres
    useradd -g 2000 -u 2000 postgres
    echo "为postgres用户设置密码:"
    passwd postgres
    
  2. 准备数据目录并授权

    mkdir -p /home/pgsql/data  # 根据你的安装路径调整,这里是示例
    chown -R postgres:postgres /home/pgsql
    chmod -R 700 /home/pgsql/data
    
  3. 初始化数据库

    • 切换到 postgres 用户:
      su - postgres
      
    • 初始化数据库(假设PostgreSQL二进制路径已在 postgres 用户的PATH中,或者使用全路径):
      /home/pgsql/bin/initdb -D /home/pgsql/data
      
  4. 配置PostgreSQL

    • 修改 pg_hba.conf (/home/pgsql/data/pg_hba.conf):
      设置认证方式,例如允许所有远程连接使用密码认证:
      host    all             all             0.0.0.0/0               md5
      
      或者更安全的限制:
      host    all             all             192.168.1.0/24          md5
      
    • 修改 postgresql.conf (/home/pgsql/data/postgresql.conf):
      启用远程连接:
      listen_addresses = '*'      # 监听所有IP地址
      port = 5432                 # 默认端口
      
  5. 设置环境变量(可选但推荐)
    postgres 用户的 ~/.bash_profile 或系统全局的 /etc/profile 中添加:

    export PGHOME=/home/pgsql
    export PGDATA=$PGHOME/data
    export PATH=$PGHOME/bin:$PATH
    export LANG=en_US.UTF8
    

    然后执行 source ~/.bash_profilesource /etc/profile 使其生效。

  6. 启动数据库

    • 使用pg_ctl(手动启动)
      su - postgres
      pg_ctl -D /home/pgsql/data -l /home/pgsql/data/logfile start
      
    • 配置为系统服务(推荐,开机自启)
      创建系统服务文件 /usr/lib/systemd/system/postgresql.service,内容示例:
      [Unit]
      Description=PostgreSQL database server
      Documentation=man:postgres(1)
      After=syslog.target
      After=network.target
      
      [Service]
      Type=forking
      User=postgres
      Group=postgres
      OOMScoreAdjust=-1000
      Environment=PGDATA=/home/pgsql/data
      ExecStart=/home/pgsql/bin/pg_ctl -s -D ${PGDATA} start -w -t 300
      ExecStop=/home/pgsql/bin/pg_ctl -s -D ${PGDATA} stop -m fast
      ExecReload=/home/pgsql/bin/pg_ctl -s -D ${PGDATA} reload
      TimeoutSec=300
      
      [Install]
      WantedBy=multi-user.target
      
      然后重新加载systemd并启动服务:
      systemctl daemon-reload
      systemctl enable postgresql
      systemctl start postgresql
      systemctl status postgresql
      
  7. 修改默认用户密码并测试

    su - postgres
    psql -d postgres
    

    在psql提示符下:

    ALTER USER postgres WITH PASSWORD '你的强密码'; 
    \q
    

    尝试用新密码重新登录进行测试。

尝试连接数据库

即使服务运行了,最终极的测试是能否成功连接到数据库。PostgreSQL 安装后会创建一个名为 postgres 的默认数据库和同名的超级用户。

  1. 切换到 postgres 系统用户
    PostgreSQL 会创建一个名为 postgres 的Linux系统用户来管理数据库。直接切换到该用户:

    sudo -i -u postgres
    

    执行后,你的命令行提示符会变成 postgres@your-server

  2. 启动 PostgreSQL 命令行客户端 psql

    psql
    

    或者直接连接到一个特定的数据库:

    psql -l  # 列出所有可用数据库
    
  3. 如何判断结果

    • 如果成功,你会进入 psql 的交互式命令行界面,提示符会变成 postgres=#。这毫无疑问证明安装完全成功

    • 在这里,你可以执行一些简单的 SQL 命令来测试,例如:

      SELECT version();
      

      或者

      \conninfo
      
    • 输入 \q 可以退出 psql,输入 exit 可以退出 postgres 用户身份。

看起来你在使用 UnionTech OS Server 20 系统时,遇到了 pg_ctl 命令找不到的问题。这通常是因为系统无法找到 pg_ctl 这个命令的位置。别担心,我们一步步来排查和解决。

首先,我为你梳理了一个解决问题的流程图,帮助你清晰快速地理解和操作:

遇到 pg_ctl 未找到命令
确认 PostgreSQL 是否安装
需先安装 PostgreSQL
查找 pg_ctl 命令路径
配置环境变量
验证环境变量
重新加载环境变量
再次尝试 pg_ctl 命令
问题是否解决?
考虑软链接或检查权限
成功

下面是每个步骤的具体操作方法:

🐧 解决 PostgreSQL 的 pg_ctl 命令未找到问题

1. 确认 PostgreSQL 是否安装

首先,你需要确认 PostgreSQL 是否已经在你的系统上安装。虽然你提到了离线安装,但最好再确认一下:

rpm -qa | grep postgresql  # 查看是否安装了PostgreSQL相关的RPM包
find / -name pg_ctl -type f 2>/dev/null  # 在整个系统查找pg_ctl文件
  • 如果没有任何输出或者找不到 pg_ctl,你可能还没有安装 PostgreSQL,或者安装不完全。
  • 如果找到了 pg_ctl(例如在 /home/pgsql/bin/pg_ctl),请记下这个路径,后面会用到。

2. 配置环境变量

找到 pg_ctl 命令的路径后,你需要将它添加到 postgres 用户的环境变量中。

  1. 编辑 postgres 用户的 ~/.bash_profile 文件

    su - postgres  # 切换到postgres用户
    vi ~/.bash_profile  # 编辑环境变量文件
    
  2. ~/.bash_profile 文件中添加以下内容(请将 /home/pgsql/bin/bin 替换为你实际找到的 pg_ctl 命令所在的目录):

    PATH=$PATH:$HOME/.local/bin:$HOME/bin:/home/pgsql/bin  # 将PostgreSQL的bin目录添加到PATH中
    export PGDATA=/home/pgsql/data  # 设置PGDATA环境变量,指向你的数据目录
    export PATH  # 导出PATH
    

    请注意,PGDATA 的值 /home/pgsql/data 需要确保是你实际的数据目录

  3. 保存文件并退出编辑器(在 vi 中按 Esc 键,然后输入 :wq 并按回车)。

  4. 使新的环境变量立即生效

    source ~/.bash_profile  # 重新加载环境变量配置文件
    
  5. 验证 pg_ctl 命令是否现在可以识别

    which pg_ctl  # 查看pg_ctl命令的完整路径
    pg_ctl --version  # 尝试查看pg_ctl版本
    

3. 使用绝对路径运行命令

在配置好环境变量之前,你可以直接使用 pg_ctl绝对路径来运行命令:

/home/pgsql/bin/pg_ctl -D /home/pgsql/data -l /home/pgsql/data/logfile start  # 使用绝对路径启动PostgreSQL

同样,请将 /home/pgsql/bin/pg_ctl 替换为你之前找到的实际路径。

4. 检查文件权限

极少数情况下,即使找到了 pg_ctl 命令,它也可能没有可执行权限。你可以检查并添加执行权限:

ls -l /home/pgsql/bin/pg_ctl  # 查看pg_ctl文件的权限
chmod +x /home/pgsql/bin/pg_ctl  # 如果缺少执行权限,则添加它

5. 创建软链接(可选)

如果觉得每次输入绝对路径麻烦,你可以将 pg_ctl 链接到系统已有的 PATH 路径下,例如 /usr/local/bin/usr/bin

sudo ln -s /home/pgsql/bin/pg_ctl /home/pgsql/bin/pg_ctl  # 创建软链接

之后,你就可以直接使用 pg_ctl 命令了。

💡 注意事项

  • 路径一致性:确保你设置的环境变量 PGDATA(这里是 /home/pgsql/data)与你的实际数据目录路径完全一致。如果不一致,后续操作可能会失败。
  • 用户权限:上述操作(除了使用 sudo 的步骤)务必在 postgres 用户下进行,或者使用 su - postgres 切换后操作,避免权限问题。
  • 安装验证:如果系统根本找不到任何 pg_ctl 命令,很可能 PostgreSQL 没有成功安装。你可能需要重新检查你的离线安装过程是否完整,所有必要的包是否都已安装。
  • 版本差异:你实际安装的 PostgreSQL 版本可能不是 17.5,因此查找路径时可能会有所不同(例如,可能是 /usr/pgsql-13/bin/pg_ctl)。请以你的实际环境为准。

💡 注意事项

  • 版本兼容性:确保你下载的PostgreSQL版本与UnionTech OS Server 20的系统架构(x86_64、aarch64等)和库文件兼容。
  • 依赖完整性离线安装最关键的就是解决所有依赖问题。务必确保所有必要的依赖包(无论是用于RPM安装还是源码编译)都已准备好并正确安装。使用 ldd 命令检查PostgreSQL二进制文件是否有缺失的动态库。
  • 防火墙:如果开启了防火墙,需要放行PostgreSQL的监听端口(默认为5432):
    firewall-cmd --add-port=5432/tcp --permanent
    firewall-cmd --reload
    
  • SELinux:如果系统启用了SELinux,可能需要配置相应的策略或将其设置为宽容模式(Permissive)以避免权限问题:
    # 临时设置为Permissive
    setenforce 0
    # 永久修改需编辑 /etc/selinux/config 文件
    
  • 数据目录权限:务必保证数据目录(如 /home/pgsql/data)的所有权和权限正确,确保 postgres 用户有完全的读写权限。

网站公告

今日签到

点亮在社区的每一天
去签到