zoukankan      html  css  js  c++  java
  • PG源码编译安装

    系统资源限制设置

    vi /etc/security/limits.conf
    
    * soft nofile  1024000
    * hard nofile  1024000
    * soft noproc  1024000
    * hard noproc  1024000
    * soft core    1024000
    * hard core    1024000
    * soft memlock 1024000
    * hard memlock 1024000
    vi /etc/security/limits.d/20-nproc.conf
    
    *          soft    nproc     unlimited
    root       soft    nproc     unlimited

    SELINUX和防火墙设置

    vi /etc/sysconfig/selinux
    
    SELINUX=disabled
    SELINUXTYPE=targeted

    OS防火墙(建议按业务场景设置,不需要就先删除所有策略,并关闭服务)

    方法1

    #设置默认接受所有请求
    /sbin/iptables -P INPUT ACCEPT
    #清除防火墙规则
    /sbin/iptables -F

    方法2

    关闭防火墙
    systemctl disable firewalld.service
    systemctl stop firewalld.service

    创建组及用户,并设置密码

    groupadd postgres
    useradd -g postgres -m postgres
    passwd postgres

    源码包下载

    https://www.postgresql.org/ftp/source/v12.2/
    postgresql-12.2.tar.gz

    检查依赖包

    rpm -q openssl  
    openssl-devel  
    pam  
    pam-devel  
    libxml2  
    libxml2-devel  
    libxslt  
    libxslt-devel  
    perl  
    perl-devel  
    python-devel  
    perl-ExtUtils-Embed  
    readline  
    readline-devel  
    zlib  
    zlib-devel  
    gettext  
    gettext-devel  
    bison  
    flex  
    uuid-devel  
    gcc  
    gcc-c++ 
    systemd

    配置yum源参考

    https://www.cnblogs.com/connected/p/12642029.html

    安装依赖包

    yum install -y openssl 
    openssl-devel  
    pam  
    pam-devel  
    libxml2  
    libxml2-devel  
    libxslt  
    libxslt-devel  
    perl  
    perl-devel  
    python-devel  
    perl-ExtUtils-Embed  
    readline  
    readline-devel  
    zlib  
    zlib-devel  
    gettext  
    gettext-devel  
    bison  
    flex  
    uuid-devel  
    gcc  
    gcc-c++ 
    systemd*

    上传源码包到/pg-rpm

    [root@centos7-6 ~]# mkdir /pg-rpm

    解压并设置权限

    cd /pg-rpm/
    tar -zxvf postgresql-12.2.tar.gz
    chown -R postgres:postgres postgresql-12.2

    创建pg安装目录

    mkdir -p /opt/pg12
    chown postgres:postgres /opt/pg12

    切换用户

    su - postgres

    编译安装

    cd /pg-rpm/postgresql-12.2
    
    ./configure 
    --prefix=/opt/pg12 
    --with-pgport=9527 
    --with-openssl  
    --with-perl 
    --with-python 
    --with-blocksize=16 
    --with-systemd

    如果加上“--with-systemd”后报错如下:

    configure: error: header file <systemd/sd-daemon.h> is required for systemd support

    则需要检查是否安装了systemd相关包,在这次验证中缺少的是 systemd-devel-219-62.el7.x86_64 

    参数详解

    ---------------
    ./configure --prefix=PREFIX
    把所有文件装在目录PREFIX中而不是/usr/local/pgsql中。 
    实际的文件会安装到数个子目录中;没有一个文件会直接安装到PREFIX根目录里。
    结果如下:
    [postgres@centos7-6 ~]$ ls  /opt/pg12/
    bin  include  lib  share
    [postgres@centos7-6 ~]$
    
    
    --with-pgport=NUMBER
    把NUMBER设置为服务器和客户端的默认端口。默认是 5432。 这个端口可以在以后修改,不过如果你在这里声明,那么服务器和客户端将有相同的编译好了的默认值。这样会非常方便些。 通常选取一个非默认值的理由是你企图在同一台机器上运行多个PostgreSQL服务器。
    
    --with-openssl
    编译SSL(加密)连接支持。这个选项需要安装OpenSSL包。configure将会检查所需的头文件和库以确保你的 OpenSSL安装足以让配置继续下去。
    
    --with-perl
    制作PL/Perl服务器端编程语言。
    
    --with-python
    制作PL/Python服务器端编程语言。
    
    --with-blocksize=BLOCKSIZE
    设置块尺寸,以 K 字节计。这是表内存储和I/O的单位。默认值(8K字节)适合于大多数情况,但是在特殊情况下可能其他值更有用。这个值必须是2的幂并且在 132 (K字节)之间。注意修改这个值需要一次 initdb。
    --with-systemd
    系统服务方式管理
    ---------------

    编译

    make world

    执行完成后显示的最后一行应该是:
    PostgreSQL, contrib, and documentation successfully made. Ready to install.

    注:
    源码安装postgresql时,而make时又没有make world,就会导致的pg最终没有类似pg_stat_statements的扩展功能
    如果选择make ,后续手动安装pg扩展插件,请参考https://www.cnblogs.com/ejQiu-123/p/11497362.html
    make
    (一定要记得用GNU make)。依你的硬件而异,编译过程可能需要 5 分钟到半小时。显示的最后一行应该是:
    
    如果你希望编译所有能编译的东西,包括文档(HTML和手册页)以及附加模块(contrib),这样键入:
    make world

    安装PostgreSQL

    make install-world

    执行完成后显示的最后一行应该是:
    PostgreSQL, contrib, and documentation installation complete.

    查看安装后的目录结构

    [postgres@centos7-6 ~]$ ls  /opt/pg12/
    bin  include  lib  share
    [postgres@centos7-6 ~]$

    创建数据存放目录并设置权限

    [postgres@centos7-6 ~]$ mkdir /opt/pg12/data
    [postgres@centos7-6 ~]$ chown postgres:postgres /opt/pg12/data

    配置环境变量

    [postgres@centos7-6 ~]$ vi ~/.bash_profile
    
    export PGHOME=/opt/pg12
    export PGPORT=9527
    export PGDATA=/opt/pg12/data
    export LD_LIBRARY_PATH=$PGHOME/lib:LD_LIBRARY_PATH
    export PATH=$PGHOME/bin:$PATH
    export PATH=/usr/local/pgsql/bin:$PATH:.

    生效环境变量

    source ~/.bash_profile

    创建一个数据库集簇

    [postgres@centos7-6 ~]$ initdb -D /opt/pg12/data -E UTF8 --locale=zh_CN.utf8
    The files belonging to this database system will be owned by user "postgres".
    This user must also own the server process.
    
    The database cluster will be initialized with locale "zh_CN.utf8".
    initdb: could not find suitable text search configuration for locale "zh_CN.utf8"
    The default text search configuration will be set to "simple".
    
    Data page checksums are disabled.
    
    fixing permissions on existing directory /opt/pg12/data ... ok
    creating subdirectories ... ok
    selecting dynamic shared memory implementation ... posix
    selecting default max_connections ... 100
    selecting default shared_buffers ... 128MB
    selecting default time zone ... PRC
    creating configuration files ... ok
    running bootstrap script ... ok
    performing post-bootstrap initialization ... ok
    syncing data to disk ... ok
    
    initdb: warning: enabling "trust" authentication for local connections
    You can change this by editing pg_hba.conf or using the option -A, or
    --auth-local and --auth-host, the next time you run initdb.
    
    Success. You can now start the database server using:
    
        pg_ctl -D /opt/pg12/data -l logfile start
    
    [postgres@centos7-6 ~]$

    启动

    [postgres@centos7-6 ~]$ pg_ctl start
    waiting for server to start....2020-04-13 16:44:34.479 CST [40486] LOG:  starting PostgreSQL 12.2 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit
    2020-04-13 16:44:34.485 CST [40486] LOG:  listening on IPv6 address "::1", port 9527
    2020-04-13 16:44:34.485 CST [40486] LOG:  listening on IPv4 address "127.0.0.1", port 9527
    2020-04-13 16:44:34.486 CST [40486] LOG:  listening on Unix socket "/tmp/.s.PGSQL.9527"
    2020-04-13 16:44:34.499 CST [40487] LOG:  database system was shut down at 2020-04-13 16:42:37 CST
    2020-04-13 16:44:34.503 CST [40486] LOG:  database system is ready to accept connections
     done
    server started
    [postgres@centos7-6 ~]$

    验证安装情况

    [postgres@centos7-6 ~]$ psql -Upostgres -l
                                     List of databases
       Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges
    -----------+----------+----------+------------+------------+-----------------------
     postgres  | postgres | UTF8     | zh_CN.utf8 | zh_CN.utf8 |
     template0 | postgres | UTF8     | zh_CN.utf8 | zh_CN.utf8 | =c/postgres          +
               |          |          |            |            | postgres=CTc/postgres
     template1 | postgres | UTF8     | zh_CN.utf8 | zh_CN.utf8 | =c/postgres          +
               |          |          |            |            | postgres=CTc/postgres
    (3 rows)

    使用systemctl来管理postgres的服务了

    vi /etc/systemd/system/postgresql.service
    
    [Unit]
    Description=PostgreSQL database server
    Documentation=man:postgres(1)
    
    [Service]
    Type=notify
    User=postgres
    ExecStart=/opt/pg12/bin/postgres -D /opt/pg12/data
    ExecReload=/bin/kill -HUP $MAINPID
    KillMode=mixed
    KillSignal=SIGINT
    TimeoutSec=0
    
    [Install]
    WantedBy=multi-user.target

    使用systemctl来管理postgres的服务

    注:使用systemctl,就需要编译安装时加上参数:--with-systemd

    systemctl start postgresql.service
    systemctl status postgresql.service
    systemctl stop postgresql.service
    systemctl disable postgresql.service
    systemctl enable postgresql.service
  • 相关阅读:
    野生的男人,家养的猪
    能在xcode5中开发基于IOS7sdk的应用程序兼容ios4.3之后的系统吗?
    ios开发怎样才能做到代码和界面彻底分离,方便换肤?
    如何解决iOS6、iOS7 3.5寸和4.0寸屏的适配问题?不要写两个xib文件
    哪些听起来很牛逼的互联网理念!
    iOS 使用宏 常量 报错 expected expression
    ios测试宏指令出错:“Expected identefier”
    某个 页面覆盖了 UITabBar 的tabItem的解决办法
    ios(包括6、7)应用程序引用系统通讯录的方法 [亲测可行]
    ios 获得通讯录中联系人的所有属性 亲测,可行 兼容io6 和 ios 7
  • 原文地址:https://www.cnblogs.com/connected/p/12692347.html
Copyright © 2011-2022 走看看