Centos7 源码编译安装 PostgreSQL11.5

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: Centos7 源码编译安装 PostgreSQL11.5

下载

地址:https://www.postgresql.org/ftp/source/v11.5/

image

# cd /opt/
# wget https://ftp.postgresql.org/pub/source/v11.5/postgresql-11.5.tar.gz

编译安装

  1. 解压安装包,执行./configure --help可以看到编译相关的信息。
# tar -zxvf postgresql-11.5.tar.gz
# mkdir -p postgresql-11.5/build_dir
# cd postgresql-11.5
# ll
total 748
-rw-r--r--.  1 1107 1107    522 Aug  5 17:14 aclocal.m4
drwxrwxrwx.  2 1107 1107   4096 Aug  5 17:28 config
-rwxr-xr-x.  1 1107 1107 561752 Aug  5 17:14 configure
-rw-r--r--.  1 1107 1107  84451 Aug  5 17:14 configure.in
drwxrwxrwx. 56 1107 1107   4096 Aug  5 17:28 contrib
-rw-r--r--.  1 1107 1107   1192 Aug  5 17:14 COPYRIGHT
drwxrwxrwx.  3 1107 1107    107 Aug  5 17:28 doc
-rw-r--r--.  1 1107 1107   3848 Aug  5 17:14 GNUmakefile.in
-rw-r--r--.  1 1107 1107    284 Aug  5 17:14 HISTORY
-rw-r--r--.  1 1107 1107  74257 Aug  5 17:29 INSTALL
-rw-r--r--.  1 1107 1107   1665 Aug  5 17:14 Makefile
-rw-r--r--.  1 1107 1107   1212 Aug  5 17:14 README
drwxrwxrwx. 16 1107 1107   4096 Aug  5 17:29 src
# ./configure --help
  1. 编译
  • 在编译的过程中会发现缺少包,所以可以提前安装依赖包
configure: error: readline library not found
If you have readline already installed, see config.log for details on the
failure.  It is possible the compiler isn't looking in the proper directory.
Use --without-readline to disable readline support.

configure: error: zlib library not found
If you have zlib already installed, see config.log for details on the
failure.  It is possible the compiler isn't looking in the proper directory.
Use --without-zlib to disable zlib support.
  • 安装依赖包
yum install -y gcc gcc-c++  epel-release llvm5.0 llvm5.0-devel clang libicu-devel perl-ExtUtils-Embed readline readline-devel zlib zlib-devel openssl openssl-devel pam-devel libxml2-devel libxslt-devel openldap-devel systemd-devel tcl-devel python-devel
  • configure
# cd build_dir/

vim ../src/Makefile.global.in
修改以下行:
COMPILE.c.bc = $(CLANG) -Wno-ignored-attributes $(BITCODE_CFLAGS) $(CPPFLAGS) -flto=thin -emit-llvm -c
修改为:
COMPILE.c.bc = $(CLANG) -Wno-ignored-attributes $(BITCODE_CFLAGS) $(CPPFLAGS) -emit-llvm -c

-- --prefix 指定默认安装路径
[root@localhost build_dir]# ../configure --prefix=/usr/local/pgsql --enable-nls --with-perl --with-python --with-tcl --with-gssapi --with-llvm LLVM_CONFIG='/usr/lib64/llvm5.0/bin/llvm-config' --with-icu --with-openssl --with-pam --with-ldap --with-systemd --with-libxml --with-libxslt
  • configure 命令完成后,会发现创建了 config.status 配置文件,如下图:

image

  • make
[root@localhost build_dir]# make
  • 出现如下图就证明编译成功,可以进行安装了

image

  • make install
[root@localhost build_dir]# make install
  • 出现如下图就证明安装成功了。

image

创建用户

编译安装成功后,接下来要做的就是创建一个普通用户,因为默认超级用户(root)不能启动postgresql,所以需要创建一个普通用户来启动数据库,执行以下命令创建用户:

[root@localhost build_dir]# groupadd postgres
[root@localhost build_dir]# useradd -g postgres postgres
[root@localhost build_dir]# passwd postgres

接下来设置权限,将pg的数据目录全部赋给postgres用户,执行以下命令:

[root@localhost build_dir]# chown -R postgres:postgres /usr/local/pgsql

创建目录

[root@localhost build_dir]# mkdir -p /mnt/db1/pgdata/pgsql /mnt/db1/pgdata/pgtbs /mnt/db1/archivelog /backups
[root@localhost build_dir]# chmod -R 775 /mnt/db1
[root@localhost build_dir]# chown -R postgres:postgres /mnt/db1

设置环境变量

[root@localhost build_dir]# vi /home/postgres/.bash_profile

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH

export PGPORT=8432
export PGHOME=/usr/local/pgsql
export PGDATA=/mnt/db1/pgdata/pgsql
export PATH=$PGHOME/bin:$PATH
export MANPATH=$PGHOME/share/man:$MANPATH
export LANG=en_US.UTF-8
export DATE='date +"%Y%m%d%H%M"'
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
export PGHOST=$PGDATA
export PGUSER=postgres
export PGDATABASE=postgres

PATH=$PATH:$HOME/.local/bin:$HOME/bin:$PGHOME/bin
export PATH

执行如下命令使其生效:

[root@localhost build_dir]# source /home/postgres/.bash_profile

初始化数据库

切换用户
[root@localhost build_dir]# su - postgres
初始化数据库
[postgres@localhost ~]$ initdb -D $PGDATA -U postgres --locale=en_US.UTF8 -E UTF8
  • 修改监听地址 将listen_addresses的值设置成*,使其监听整个网络,端口号默认是5432,也可以自己设置。
[postgres@localhost ~]$ vim /mnt/db1/pgdata/pgsql/postgresql.conf
修改内容:
listen_addresses = '*'
unix_socket_directories = '.'
port = 8432
  • 修改客户端认证方式
[postgres@localhost ~]$ vim /mnt/db1/pgdata/pgsql/pg_hba.conf
添加内容:
host all all 0.0.0.0/0 md5 # 其他用户登陆

设置防火墙规则

#切换回root用户
[postgres@localhost ~]$ exit
[root@localhost build_dir]# firewall-cmd --zone=public --add-port=8432/tcp --permanent
[root@localhost build_dir]# firewall-cmd --reload

启动数据库

[root@localhost build_dir]# su - postgres
启动
[postgres@localhost ~]$ pg_ctl -D /mnt/db1/pgdata/pgsql -l /mnt/db1/archivelog/pgsql.log start
停止
[root@localhost postgres]# pg_ctl -D /mnt/db1/pgdata/pgsql/ -s -m fast stop

连接测试

[postgres@localhost ~]$ psql
查询所有用户
postgres=# select * from pg_user;
postgres=# select * from pg_roles;
查询权限
postgres=# select * from information_schema.table_privileges where grantee='cc';
查看有哪些数据库
postgres=# \l
相当与mysql的show databases;
postgres=# select datname from pg_database;
相当于mysql的show tables, public 是默认的schema的名字
postgres=# SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
相当与mysql的describe table_name, 'table_name'是要查询的表的名字
postgres=# SELECT column_name FROM information_schema.columns WHERE table_name ='table_name';
退出
postgres=# \q

psql 是 PostgreSQL 的客户端程序,要连接 PostgreSQL 数据库,我们需要指定以下内容:

  • -d or --dbname 数据库名
  • -h or --host 主机名
  • -p or --port 端口号,默认5432 端口
  • -U or --username 用户名
    [postgres@localhost ~]$ psql -h localhost -p 8432 -U postgres

设置postgres用户密码

[postgres@localhost ~]$ psql
postgres=# ALTER USER postgres WITH encrypted PASSWORD 'new password';
postgres=# \q
[postgres@localhost ~]$ psql -h localhost -p 8432 -U postgres

设置开机自启动

  • 设置启动配置
vim /usr/lib/systemd/system/postgresql-11.service
添加内容:
[Unit]
Description=PostgreSQL 11 database server
Documentation=https://www.postgresql.org/docs/11/static/
After=syslog.target
After=network.target

[Service]
Type=notify

User=postgres
Group=postgres

# Location of database directory
Environment=PGDATA=/mnt/db1/pgdata/pgsql/

# Where to send early-startup messages from the server (before the logging
# options of postgresql.conf take effect)
# This is normally controlled by the global default set by systemd
# StandardOutput=syslog

# Disable OOM kill on the postmaster
OOMScoreAdjust=-1000

Environment=PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj
Environment=PG_OOM_ADJUST_VALUE=0

# ExecStartPre=/usr/pgsql-11/bin/postgresql-11-check-db-dir ${PGDATA}
ExecStart=/usr/local/pgsql/bin/postmaster -D ${PGDATA}
ExecReload=/bin/kill -HUP $MAINPID
# ExecStart=/usr/local/pgsql9.4/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT}" -w -t 300
# ExecStop=/usr/local/pgsql9.4/bin/pg_ctl stop -D ${PGDATA} -s -m fast
# ExecReload=/usr/local/pgsql9.4/bin/pg_ctl reload -D ${PGDATA} -s
KillMode=mixed
KillSignal=SIGINT

# Do not set any timeout value, so that systemd will not kill postmaster
# during crash recovery.
TimeoutSec=0

[Install]
WantedBy=multi-user.target
  • 添加可执行权限
[root@localhost postgres]# chmod 754 /usr/lib/systemd/system/postgresql-11.service
  • 设置开机自启动
自动启动
[root@localhost postgres]# systemctl enable postgresql-11.service
启动
[root@localhost postgres]# systemctl start postgresql-11.service
停止某服务
[root@localhost postgres]# systemctl stop postgresql-11.service
不自动启动
[root@localhost postgres]# systemctl disable postgresql-11.service
检查服务状态(服务详细信息)
systemctl status postgresql-11.service
检查服务状态(仅显示是否Active)
systemctl is-active postgresql-11.service
显示所有已启动的服务
systemctl list-units --type=service

yum 安装

选择源:https://www.postgresql.org/download/linux/redhat/

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
3月前
|
SQL 关系型数据库 Linux
在CentOS 6上安装和使用PostgreSQL的方法
在CentOS 6上安装和使用PostgreSQL的方法
40 2
|
3月前
|
关系型数据库 Linux 数据库
在CentOS 7上安装和使用PostgreSQL的方法
在CentOS 7上安装和使用PostgreSQL的方法
279 0
|
网络协议 关系型数据库 Linux
Centos7 PostgreSQL安装
Centos7 PostgreSQL安装
266 0
|
关系型数据库 Linux 开发工具
centos 安装postgresql13 指定版本
centos 安装postgresql13 指定版本
545 0
|
关系型数据库 Linux 网络安全
CentOS 7 源码编译安装 PostgreSQL 11.2
CentOS 7 源码编译安装 PostgreSQL 11.2
397 0
CentOS 7 源码编译安装 PostgreSQL 11.2
|
关系型数据库 数据库 数据安全/隐私保护
CentOS7.5安装配置PostgreSQL10
CentOS7.5安装配置PostgreSQL10
317 0
CentOS7.5安装配置PostgreSQL10
|
关系型数据库 数据库 数据安全/隐私保护
CentOS7.5安装配置PostgreSQL11
CentOS7.5安装配置PostgreSQL11
289 0
CentOS7.5安装配置PostgreSQL11
|
网络协议 关系型数据库 MySQL
Centos7 源码编译安装 PostgreSQL11.5
Centos7 源码编译安装 PostgreSQL11.5
473 0
Centos7 源码编译安装 PostgreSQL11.5
|
关系型数据库 数据库 开发工具
CentOS7.X安装postgresql-10.3
CentOS7.X安装postgresql-10.3
2542 0