• Linux 编译安装PostgreSQL


    Linux 编译安装PostgreSQL

    准备

    安装好系统,我的是 centos stream 9

    $ cat  /etc/redhat-release 
    CentOS Stream release 9
    
    • 1
    • 2

    创建专用用户

    groupadd postgres
    useradd -g postgres postgres
    echo postgres | passwd --stdin postgres
    
    • 1
    • 2
    • 3

    防火墙和selinux按照需求关闭,我这是测试环境,索性关闭

    关闭selinux

    sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
    setenforce 0
    # 输入 getenforce 返回 Permissive 则是关闭状态
    
    • 1
    • 2
    • 3

    关闭防火墙

    systemctl stop firewalld.service
    systemctl disable firewalld.service
    # 查看是否关闭
    systemctl status firewalld.service
    
    • 1
    • 2
    • 3
    • 4

    创建一个postgres安装目录,不建议放在 home 下,往往 home 磁盘比较小

    mkdir -p /opt/pgsql
    chown -R postgres:postgres /opt/pgsql
    
    • 1
    • 2

    下载编译安装所需软件

    yum install gcc gcc-c++ readline-devel zlib-devel openssl-devel systemd-devel
    
    • 1

    编译安装

    下面所有操作都是在 postgres 用户下执行

    su - postgres
    
    • 1

    下载好安装包

    wget https://ftp.postgresql.org/pub/source/v15.1/postgresql-15.1.tar.bz2
    # 验证安装包是否完整,查看 md5 值和 sha256 值对的上就可以
    md5sum postgresql-15.1.tar.bz2
    sha256sum postgresql-15.1.tar.bz2
    # 官方 MD5和sha256,通过浏览器直接打开链接也可以看到
    curl -v https://ftp.postgresql.org/pub/source/v15.1/postgresql-15.1.tar.bz2.md5
    curl -v https://ftp.postgresql.org/pub/source/v15.1/postgresql-15.1.tar.bz2.sha256
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    解压

    tar xf postgresql-15.1.tar.bz2
    cd postgresql-15.1/
    
    • 1
    • 2

    编译安装

    ./configure --prefix=/opt/pgsql/postgresql-15.1 --with-openssl --with-zlib --with-systemd --with-readline
    make
    make all
    make check
    make install
    
    # 创建软连接,方便日后升级
    ln -sf /opt/pgsql/postgresql-15.1/ /home/postgres/pgsql
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    初始化并创建数据库

    能够正常连接test数据的话就没有问题

    # 初始化
    /home/postgres/pgsql/bin/initdb -D /opt/pgsql/data
    # 启动数据库
    /home/postgres/pgsql/bin/pg_ctl -D /opt/pgsql/data -l /opt/pgsql/pgsql.log start
    # 创建数据库 test
    /home/postgres/pgsql/bin/createdb test
    # 连接数据test
    /home/postgres/pgsql/bin/psql test
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    设置PostgreSQL的环境变量

    echo "export PATH=/home/postgres/pgsql/bin:$PATH" >> /home/postgres/.bashrc
    echo "export LD_LIBRARY_PATH=/home/postgres/pgsql/lib" >> /home/postgres/.bashrc
    source /home/postgres/.bashrc
    
    • 1
    • 2
    • 3

    开启远程登录

    1、修改 postgresql.conf 文件: vim /opt/pgsql/data/postgresql.conf , 修改listen_addresses的值

    #listen_addresses = 'localhost'         # what IP address(es) to listen on;
    listen_addresses = '*'
    
    • 1
    • 2

    2、在 pg_hba.conf 文件最后添加如下内容

    echo "host all all 0/0 md5" >> /opt/pgsql/data/pg_hba.conf
    
    • 1

    3、创建需要连接的数据库和用户(也可以用已存在的)

    create user appuser with password 'Appuser';
    create database mshing owner appuser;
    grant all privileges on database mshing to appuser;
    
    • 1
    • 2
    • 3

    4、重启数据库

    /home/postgres/pgsql/bin/pg_ctl -D /opt/pgsql/data -l /opt/pgsql/pgsql.log restart
    
    • 1

    5、测试远程连接

    $ psql -h 192.168.253.128 -d mshing -U appuser
    Password for user appuser: 
    psql (15.1)
    Type "help" for help.
    
    mshing=> 
    mshing=> exit
    
    # --------
    # 未开启远程时直接连接会报错
    $ psql -h 192.168.253.128 -d mshing -U appuser
    psql: error: connection to server at "192.168.253.128", port 5432 failed: 拒绝连接
            Is the server running on that host and accepting TCP/IP connections?
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    远程没问题后就可以愉快的使用图形化工具来玩数据库了。比如:Navicat、DataGrip,还有免费开源好用的DBeaver。

    用PostgreSQL自研的pgAdmin也是非常不错的选择。

    这些操作下来还是不能连接,可以注意一下防火墙、安全组之类的规则。

    使用 systemd 管理服务

    sudo vim  /etc/systemd/system/postgresql.service
    sudo chmod 755 /etc/systemd/system/postgresql.service
    sudo systemctl daemon-reload 
    
    • 1
    • 2
    • 3

    内容如下:

    [Unit]
    Description=PostgreSQL database server
    Documentation=man:postgres(1)
    After=network-online.target
    Wants=network-online.target
    [Service]
    Type=notify
    User=postgres
    Group=postgres
    ExecStart=/home/postgres/pgsql/bin/postgres -D /opt/pgsql/data
    ExecReload=/bin/kill -HUP $MAINPID
    KillMode=mixed
    KillSignal=SIGINT
    TimeoutSec=infinity
    [Install]
    WantedBy=multi-user.target
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    接下来就可以愉快的使用systemd来管理PostgreSQL了

    systemctl start postgresql.service
    systemctl restart postgresql.service
    systemctl stop postgresql.service
    systemctl status postgresql.service
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    java反序列化之URLDNS链学习
    vue导出excel使用xlsx、file-saver、xlsx-style、yxg-xlsx-style 遇到的坑
    typora|将绝对路径的图片,全部替换为相对路径
    git - 拉取远程代码并且不覆盖本地修改的代码
    java毕业生设计写手管理平台计算机源码+系统+mysql+调试部署+lw
    Android中的KeyEvent详解
    NNDL 实验八 网络优化与正则化(2)批大小的调整
    【Vue3 源码解析】nextTick
    Rethinking the Inception Architecture for Computer Vision--Christian Szegedy
    unity内存优化之AB包篇(微信小游戏)
  • 原文地址:https://blog.csdn.net/Magic_Ninja/article/details/127978277