美文网首页
PostgreSQL源码安装

PostgreSQL源码安装

作者: 这货不是王马勺 | 来源:发表于2022-11-01 18:01 被阅读0次

    下载

    从官网下载,地址:

    https://www.postgresql.org/download/
    

    不建议从中文社区下载。
    从官网见面看,目前是提供两种安装模式,Packages和Source;
    Packages就是yum或rpm安装,选择完成后就会显示安装scripts;按照提示完成安装即可。适合开发或学习使用。
    Source适合生产环境使用。这里我们使用12版本为例

    选择.bz2或.gz下载都可以,只是压缩方式不同。
    下载好后上传至服务器。

    OS环境配置

    创建用户和组
    建议非root用户管理,因此创建postgres用户:

    user add postgres
    passwd postgres
    

    安装依赖包

    yum groupinstall -y "Development Tools" "Legacy UNIX Compatibility"
    yum install -y bison flex readline* zlib-devel gcc* gmake
    

    创建目录并授权
    一个是软件安装目录,一个是数据目录,
    可以类比mysql的basedir和datadir;

    mkdir -p /usr/local/pg12
    mkdir -p /pgdata/12/data
    chown -R postgres. /pgdata
    chown -R postgres. /usr/local/pg12
    chmod 700 /pgdata/12/data -R
    

    操作系统参数优化
    pg和oracle类似需要调一些内核参数,因为是多进程,对于内核参数的要求较多;这一点不同于mysql;

    vim /etc/sysctl.conf 
    
    kernel.shmmax = 68719476736
    kernel.shmall = 4294967296
    kernel.shmmni = 4096
    kernel.sem = 50100 64128000 50100 1280
    fs.file-max = 7672460
    net.ipv4.ip_local_port_range = 9000 65000
    net.core.rmem_default = 1048576
    net.core.rmem_max = 4194304
    net.core.wmem_default = 262144
    net.core.wmem_max = 1048576
    

    生效配置:

    sysctl -p
    

    限制参数:

    vim /etc/security/limits.conf
    
    * soft   nofile    131072
    * hard   nofile    131072
    * soft   nproc    131072
    * hard   nproc    131072
    * soft   stack    unlimited
    * hard   stack   unlimited
    * hard   memlock    50000000
    * soft   memlock    50000000
    

    建议关闭numa,设置IO策略未deadline(机械)或者noop(SSD):
    一般在OS启动时bios使用numa off参数。
    查看numa状态:

    numactl --show
    dmesg | grep -i numa
    cat /proc/cmdline
    

    在bios中将numa关闭:

    grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="numa=off"
    

    或编辑/etc/default/grub,在在GRUB_CMDLINE_LINUX一栏添加numa=off;
    重新生成 /etc/grub2.cfg 配置文件:

    grub2-mkconfig -o /etc/grub2.cfg
    

    重启服务器生效。
    如果发现已经启用了numa又不能重启,也可以调整OS参数去修改

    vim /etc/sysctl.conf
    
    vm.zone_reclaim_mode = 0
    kernel.numa_balancing=0
    numactl --interleave=all pg_ctl start -D $PGDATA
    

    其中vm.zone_reclaim_mode:当一个内存区域(zone)内部的内存耗尽时,是从其内部进行内存回收还是可以从其他zone进行回收的选项,0表示可以从下一个zone找可用内存;
    kernel.numa_balancing:是否启用NUMA平衡功能,将任务移动到最近的内存或移动内存到任务执行最近的地方,0表上关闭;
    numactl --interleave=all:无视 NUMA 关于 CPU 内存分配的策略,可以使得各个 CPU 区域的内存均匀分配。

    查看IO策略,此处以xvda为例:

    cat /sys/block/xvda/queue/scheduler
    

    显示为deadline或noop都可以(算法不同,noop更倾向于饿死读而优先写,适合SSD)。避免使用cfq。

    echo noop > /sys/block/xvda/queue/scheduler
    

    重启后会失效,如果想持久化则需要将命令放在/etc/rc.local中,或者直接修改grub:

    vim /etc/default/grub
    

    在GRUB_CMDLINE_LINUX一栏添加elevator=noop,再重新生成grub2.cfg配置文件,方法类似上面关闭numa
    或者:

    grubby --update-kernel=ALL --args="elevator=noop"
    

    重启生效。

    源码安装

    C的源码包需要编译安装。
    上传软件解压
    上传至/opt并解压:

    tar -xf postgresql-12.12.tar.gz
    cd postgresql-12.12
    

    配置、编译、安装
    ./configure --help查看可定制的参数,其中打印的结果中--with类的都是打开一些功能,此外还有--without,--disable等,具体参考官网;
    此处仅指定安装目录和端口,不指定的话默认端口是5432;这些参数后面初始化也可以指定;

    ./configure --prefix=/usr/local/pg12 --with-pgport=5432
    
    #全部可用功能编译
    gmake world
    
    #把所有编译好的进行安装(建目录+拷贝)
    gmake install -world
    

    配置环境变量

    su postgres
    cd ~
    vim .bash_profile
    
    export PGDATA=/pgdata/12/data
    export LANG=en_US.utf8
    export PGHOME=/usr/local/pg12
    export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH
    export DATE=`date +"%Y%m%d%H%M"`
    export PATH=$PGHOME/bin:$PATH:.
    export MANPATH=$PGHOME/share/man:$MANPATH
    export PGUSER=postgres
    
    source .bash_profile
    

    检查版本

    psql --version
    

    如果正常显示说明环境变量配置成功。

    初始化数据

    su - postgres
    

    简易初始化

    initdb -D /pgdata/12/data -w
    

    生产建议

    initdb -A md5 -D $PGDATA -E utf8 --locale=C -W
    

    -A 是加密方式
    -D 是数据目录
    -E 是字符集 (默认即utf8)
    执行之后会提示输入密码。

    启停数据库

    可以按照初始化打印的结果来启动,完整命令:

    pg_ctl -D /pgdata/12/data/ -l logfile start
    

    如果配了环境变量也可以直接pg_ctl start来启动,因为pgdata能识别到;
    重启:pg_ctl restart
    关闭:pg_ctl stop
    通过pg_ctl --help可以查看完整的选项,
    其中关闭和重启选项中的shutdown modes包括smart、fast、immediate;
    smart是最安全的关闭方法,等待所有客户端连接关闭之后才关闭;
    fast是用的生产中最多的,自动杀掉连接,回滚未完成事务;
    immediate相当于kill -9;
    对应的语句:

    pg_ctl -D /pgdata/12/data/  stop -ms
    pg_ctl -D /pgdata/12/data/  stop -mf
    pg_ctl -D /pgdata/12/data/  stop -mi
    

    此外启动数据库还可以通过脚本启动,需要切换回root用户执行

    /opt/postgresql-12.12/contrib/start-scripts/linux
    

    使用此脚本需要修改脚本中prefix、PGDATA等内容。

    登录数据库

    刚装完仅允许本地socket连接,一般socket再/tmp目录下,是个隐藏文件;
    直接输入psql,输入密码即可进入命令行,默认进入系统postgres这个库中;
    简单操作:

    \l
    create database test1;
    \c test1;
    create table t1(id int);
    insert into t1 values(1);
    select * from t1;
    

    其中\l查看所有库,\c使用某库,\d或\dt查看当前库下的表。

    远程连接还需配置实力级别的访问控制:

    cd $PGDATA
    vim pg_hba.conf
    
    host DBname username 10.10.10.0/24 md5
    

    md5的未知写reject就不允许这一条登录;
    如果两条有重叠,则按从上到下顺序读取,一旦一条生效,后面的则不会读到。

    此外由于默认只监听本地,还需要配置linstener才能监听到,以全部监听为例:

    vim postgresql.conf
    listen_addresses = '0.0.0.0'
    

    重启后生效:

    pg_ctl restart -mf
    

    用超管postgres以TCP/IP方式登录:

    psql -d postgres -h 10.10.10.51 -p 5432 -U postgres
    

    常用命令

    查看psql命令行客户端相关命令:

    \?
    

    查看sql相关语句:

    \h
    

    列举库名,相当于show databases:

    \l
    

    其中默认库有postgres、template0、template1;

    切换到某库,相当于use

    \c db1
    

    查看库下的表:

    \d
    \dt
    

    看t1表结构:

    \d t1
    

    查看某语句的帮助,例如查看create user语句的帮助:

    \help create user
    

    查看用户权限信息:

    \du
    

    PG中元数据存在pg_开头的表中,如:

    select * from pg_tables where schemaname not in ('pg_catalog','information_schema');
    

    如将查询竖着显示,先执行\x,再执行查询;类似MySQL中的\G;

    \x
    

    相关文章

      网友评论

          本文标题:PostgreSQL源码安装

          本文链接:https://www.haomeiwen.com/subject/oxprtdtx.html