一、编译安装:

  • 环境准备:

    • GNU make 版本 >=3.8 (make --version)
    • ISO/ANSI C 编译器,至少須兼容 C89 标准,GCC 或 intel 編译器等均可
    • gzip 、bzip2 、tar ,源码解包
    • GNU Readline 库,用于 psql 操作历史命令
    • 安全相关模块:Kerberos、OpenSSL、OpenLDAP、PAM 等,需要事先安装好对应的包
    • 如果要使用 PL/Python、PL/Perl、PL/Tcl 等过程語言,須保証語言本身及相关的开发库安装到位
    • 如果使用的是 Git 中的源码或需要做服务器端开发,则另外需要 GNU Flex(>=2.5.31) 及 Bison(>=1.875),不能使用其它 lex 或 yacc 程序
    • 磁盘空间:編译过程源码树占用 100M+,生成的程序文件 20M+,一个空数据库 data 目录 30M+,回归测试空间 150M+;注:一个数据库所占的空间大約是存储同等数据的平面文件所占空间的五倍
  • configure 編译选项:

    • --prefix=PREFIX 指定安装目录,默认为 /usr/local/pgsql
    • --bindir= 可执行文件目录,默认 /PREFIX/bin
    • --sysconfdir= 配置文件目录,默认 /PREFIX/etc
    • --libdir= 库文件目录,默认 /PREFIX/lib
    • --includedir= 头文件目录,默认 /PREFIX/include
    • --datarootdir=DATAROOTDIR 设置只读共享文件目录,默认为 /PREFIX/share
    • --mandir= man手册目录,默认 /DATAROOTDIR/man
    • --with-extra-version=STRING 在版本号后面追加 STRING 字符串,用作自定义版本标识
    • --with-pgport=NUMBER 指定服务器端与客户端的默认端口号,缺省为 5432
    • --with-openssl 編译 ssl 支持,需要事先安装 OpenSSL 包
    • --with-pam 編译 PAM 支持
    • --with-ldap 編译 LDAP 支持,需要事先安装 OpenLDAP 包
    • --with-segsize= 设定 segment size ,以 gigabytes(GB) 为单位,默认为 1GB ,大型的表会按 segsize 被分割成多个文件
    • --with-blocksize= 指定块大小,是表内存储和 I/O 的基本单位,默认 8Kbytes ,通常无需变更,取值范围 1-32KB
    • --with-wal-segsize= 设置 WAL(Write-Ahead Logging) 的 segment size ,以 megabytes(MB) 为单位,默认 16MB ,取值范围 1-64MB
    • --with-wal-blocksize= 指定 WAL 的块大小,这是 WAL 預写式日志存储和 I/O 的基本单位,以 Kbytes 为单位,默认 8KB ,取值范围 1-64KB
    • --enable-debug (Compiles all programs and libraries with debugging symbols. This means that you can run the programs in a debugger to analyze problems),使用 GCC 編译器时可用于生产环境,其它編译器会影响性能;多用于开发
    • --enable-profiling GCC編译器下,所有程序和库将被編译成可进行性能分析,后端退出时生成的 gmon.out 用于性能分析;多用于开发
    • --enable-coverage 代码覆盖率测试,仅用于开发
    • --enable-cassert 开启服务器的 assertion(断言) 检查,仅用于开发
    • --enable-depend (Enables automatic dependency tracking. With this option, the makefiles are set up so that all affected object files will be rebuilt when any header file is changed),仅用于开发
    • --enable-dtrace 編译动态追踪工具 Dtrace 支持,当前尚不能用于 Linux 平台,可用于 FreeBSD、Solaris
    • --with-systemd 开启 systemd 支持,需9.6及以上版本
  • configure 环境变量,可以在命令行上指定环境变量,形如: ./configure CC=/opt/bin/gcc CFLAGS='-O2 -pipe'

    • CC 指定 C 編译器
    • CFLAGS 设置 C 編译器选项
    • CPP 指定 C 預编译器
    • CPPFLAGS 设置 C 預编译器选项
  • make 选项:

    • make 按默认配置編译
    • make world 同时編译文档及附加模块(contrib)
    • make check 回归测试,用于安装完成后测试功能完整性,不能以 root 身份运行
    • make install 安装程序
    • make install-docs 安装文档(info、man手册)
    • make install-world 安装所有可安装的
    • make uninstall 删除安装的文件(生成的目录无法删除)
    • make clean 清除 make 生成的文件,但保留 configure 生成的文件
    • make distclean 将源码恢复为原始状态,即同时删除 make 与 configure 阶段生成的文件
    • make -C 指定源文件目录,仅安装程序的特定部分;如只安装客户端应用和接口:make -C src/bin install; make -C src/include install; make -C src/interfaces install; make -C doc install

二、安装后设置

  • 共享库

    • 法一:在 /etc/profile 或 ~/.bash_profile 中写入:export LD_LIBRARY_PATH=/usr/local/pgsql/lib ,目标須目录与安装时指定的一致
    • 法二:在 /etc/ld.so.conf.d/ 目录下创建 pgsql.conf 或直接操作 /etc/ld.so.conf 文件,写入 /usr/local/pgsql/lib ,之后运行 ldconfig 更新緩存
  • 环境变量

    • 在 /etc/profile 或 ~/.bash_profile 中写入:

      • export PATH=/usr/local/pgsql/bin:$PATH
      • export MANPATH=/usr/local/pgsql/man:$MANPATH
    • 变量 PGHOST 与 PGPORT 用于为客户端应用指定数据库服务器的主机和端口,它会覆盖編译时的默认项

三、服务器设置和操作

  • PostgreSQL 用户账户

    • 建议性原则:新建一个独立的私有账户,专用于运行 PostgreSQL 服务器端,作为数据库 data 目录及其父目录的属主,但不能把可执行文件安装为属于这个用户
    • useradd 添加系统用户,createuser 创建对应的 PostgreSQL 同名用户,createdb 创建数据库
  • Creating a Database Cluster(catalog cluster)
    • initdb -D /usr/local/pgsql/data
    • 或 设置 PGDATA环境变量后直接执行 initdb 或 pg_ctl initdb
    • 或 pg_ctl -D /usr/local/pgsql/data initdb
  • 使用单独的数据分区
    • 不要将分区的项层目录(挂载点)作为 Database Cluster 目录,应在其上建立一个目录(父目录),然后在其中创建数据目录,在避免出现权限问题的同时,可防止由于挂载点断线造成的数据紊乱
  • Starting the Database Server
    • pg_ctl start -l logfile -D /PATH/TO/data 或 postgres -D /PATH/TO/data >serverlog 2>&1 & ,serverlog 須替换成实际的日志文件路径
    • 设置 PostgreSQL 开机启动时,不能以 root 或其它用户启动,应在启动脚本中使用类似:su postgres -c 'pg_ctl start -l serverlog -D /PATH/TO/data'
    • 服务器运行时,PID 被保存在 data 目录下的 postmaster.pid文件中的第一行
  • 服务启动常见问题
    • 端口被占用(已有正在运行的 PostgreSQL 进程或其它程序)
    • 试图使用一个保留端口 (<1024),如:postgres -p 666
    • 共享内存 (System-V-style shared memory) 或 信号量 (System V semaphores) 不足,能常是由于内核限制或根本没有开启对应的支持项 (If you get an "illegal system call" error,it is likely that shared memory or semaphores are not supported in your kernel at all)
  • 客户端连接常见问题
    • 服务器没有启动或没有配置成允许 TCP/IP 连接,通常会收到 'psql: could not connect to server: ...' 类似的錯誤提示
    • 客户端自身网络问题等
  • 共享内存 (shm) 与信号量 (sem)
    • 修改 /etc/sysctl.conf 中的 kernel.shmmax 等,立即生效需执行 sysctl -p
    • 或 更改 /proc/sys/kernel/shmall 等
  • 系统資源限制 (/proc/sys/fs/file-max 等)
    • the number of processes per user
    • the number of open files per process
    • the amount of memory available to each process
  • 应对 out-of-memory (OOM) killer
    • Pid=`head -n 1 /PATH/TO/postmaster.pid` && echo -1000 > /proc/$Pid/oom_score_adj 首选
    • 或 Pid=`pidof postgres` && echo -17 > /proc/$Pid/oom_adj 通常用于 2.6 版本以前的内核
    • 内核源码参见:...src/linux/include/uapi/linux/oom.h
  • 使用 Linux 大頁内存
    • 更改 /proc/sys/vm/nr_hugepages 的值
    • 或 设定 /etc/sysctl.conf 中 vm.nr_hugepages=
  • 关闭服务器
    • 通常使用 SIGTERM(等待所有进程正常关闭后退出,包括备份) 或 SIGINT(与 SIGTERM 类同,但不会等待备份进程) 信号,不推荐使用 SIGQUIT(5 秒种内没有正常退出的进程将被直接关闭) 和 SIGKILL(立即无条件退出,此信号不能同时关闭子进程,且来不及释放共享内存与信号量)
    • 如:kill -INT `head -1 /PATH/TO/postmaster.pid`
    • 注:可以指定的給子进程发送信号
  • Upgrading a PostgreSQL Cluster
    • 对于次版本号之间的升級,直接更新可执行文件并重启服务器即可
    • The traditional method for moving data to a new major version is to dump and reload the database, though this can be slow
      1. pg_dumpall > outputfile
      2. pg_ctl stop
      3. mv /usr/local/pgsql /usr/local/pgsql.old 备份旧版本可执行文件
      4. Install the new version of PostgreSQL
      5. Create a new database cluster if needed:/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
      6. 配置新服务器的 pg_hba.conf 与 postgresql.conf 等
      7. Start the new database server:pg_ctl start -D /usr/local/pgsql/data
      8. Finally, restore your data from backup with:/usr/local/pgsql/bin/psql  -f outputfile
    • 通过 pg_upgrade 升級:https://www.postgresql.org/docs/9.6/static/pgupgrade.html
      1. pg_upgrade -b oldbindir -B newbindir -d olddatadir -D newdatadir [option...]
      2. ...

四、Encryption and Secure

  • Preventing Server Spoofing
  • OpenSSL
  • SSH tunneling

PostgreSQL——服务器基本设置与操作的更多相关文章

  1. PostgreSQL服务器参数配置

    服务器配置1 设置参数1.1 参数名称和值所有参数名都是大小写不敏感的.每个参数都可以接受五种类型之一的值: 布尔.字符串.整数. 浮点数或枚举.布尔: 值可以被写成 on, off, true, f ...

  2. powershell对txt文件的服务器进行ping操作

    powershell对txt文件的服务器进行ping操作,txt文件有几百台服务器要进行Ping操作.每行一个 #//***************************************** ...

  3. MySQL 服务器变量 数据操作DML-视图

    原文:MySQL 服务器变量 数据操作DML-视图 SQL语言的组成部分 常见分类: DDL:数据定义语言 DCL:数据控制语言,如授权 DML:数据操作语言 其它分类: 完整性定义语言: DDL的一 ...

  4. FTP服务器搭建及操作(一)

    FTP服务器搭建及操作(一) FTP搭建 PHP FTP操作 搭建方法参照(windows):http://www.cnblogs.com/lidan/archive/2012/06/04/25351 ...

  5. 将GitLab数据库从阿里云PostgreSQL RDS迁移至自建的PostgreSQL服务器

    阿里云RDS目前支持的是PostgreSQL 9.4,而gitlab支持的最低版本是PostgreSQL 9.6.1,不升级PostgreSQL,gitlab就无法升级,阿里云RDS短期内不进行升级, ...

  6. windows环境jar包部署到linux服务器,一键操作

    背景: windows系统下生成的jar包通过FTP上传到linux服务器,然后通过XShell进行jar包的发布,这样反复了几个月后,开发阶段需要频繁更新包的部署.个人觉得很繁琐,想一键式把这个工作 ...

  7. ipcclean - 从退出的PostgreSQL服务器中删除共享内存和信号灯

    SYNOPSIS ipcclean DESCRIPTION 描述 ipcclean 删除当前用户拥有的所有共享内存段和信号灯集. 它的目地是在 PostgreSQL 服务器 (postmaster(1 ...

  8. postgres - 以单用户模式运行一个 PostgreSQL服务器

    SYNOPSIS postgres [ -A 0 | 1] [ -B nbuffers] [ -c name=value] [ -d debug-level] [ --describe-config ...

  9. 《PostgreSQL服务器编程》一一1.3 超越简单函数

    本节书摘来自华章计算机<PostgreSQL服务器编程>一书中的第1章,第1.3节,作者:(美)Hannu Krosing, Jim Mlodgenski, Kirk Roybal 著,更 ...

随机推荐

  1. RabbitMQ(七)心跳控制 -- heartbeat

    https://blog.csdn.net/jiao_fuyou/article/details/23186407

  2. 用 Flask 来写个轻博客 (16) — MV(C)_Flask Blueprint 蓝图

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 Blueprint 蓝图 定义一个蓝图 注册一个蓝图 创建蓝 ...

  3. 仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'XXX'中的标识列指定显式值。

    (来自:https://zhidao.baidu.com/question/494717175.html)第一条回复,原因和例子都有了,解释的很好. 插入数据时,自增长列是系统自动处理,不需要你来指定 ...

  4. Nginx网络架构实战学习笔记(六):服务器集群搭建、集群性能测试

    文章目录 服务器集群搭建 Nginx---->php-fpm之间的优化 302机器 202机器 压力测试 搭建memcached.mysql(数据准备) 今晚就动手-.- 集群性能测试 服务器集 ...

  5. 运维 05 Shell基本命令

    Shell基本命令   前言 前面咱们已经成功安装了Linux系统--centos7,那么现在跟着超哥奔向Linux的大门. Linux命令行的组成结构 [root@oldboy_python ~]# ...

  6. CentOS7 部署单节点 FastDFS

    准备 环境 系统:CentOS7.5 软件即依赖 libfatscommon FastDFS分离出的一些公用函数包 FastDFS fastdfs-nginx-module FastDFS和nginx ...

  7. 二、hibernate的常用API

    hibernate的调用过程 public class demo01 { @Test public void test(){ // 1.加载hibernate核心配置文件 Configuration ...

  8. enovia plm export to sap

    UPC creation UPC 结构 PLM 使用的UPC 是 14个数字组成的,兼容. 前两位为 0,后12位为有效数字,在SAP中0会被忽略,符合国际UPC通用 规则, 前一位为0,后13 位为 ...

  9. Puppeteer自动化批量上传抖音视频

    前言:最近因为项目宣传,所以用Puppeteer写了一个批量上传抖音视频的自动化程序用于推广. 环境和依赖:node,puppeteer 废话不多说,直接上代码: const puppeteer =r ...

  10. Vue之自建管理后台(一)准备工作

    完成最基础的Vue环境及新建一个vue项目. 一般来说,我们拿到一个项目需求或者得到一个需求的时候,第一件应该做的事情不是立马坐在电脑前面去写代码,如果你这么做的,好吧...我只能暂时认定你为一个刚上 ...