说明

目前PostGreSQL最新版本为11.3,​​9.3及之前版本​​以不再受官方支持.从RHEL/CentOS/SL/OL 6开始都自带PG数据库,下表是不同的操作系统版本对应的数据库版本:

操作系统版本

自带数据库版本

RHEL 8

10 and 9.6 via modules

RHEL/CentOS/SL/OL 7

9.2 (also supplies package rh-postgresql10, rh-postgresql96,

RHEL/CentOS/SL/OL 6

8.4 (also supplies package rh-postgresql96, via SCL)

Fedora 30

11

Fedora 29

10

安装方法 - Linux

PG安装方法很多,和MySQL类似,给用户提供很大的选择空间。如:RPM包安装(在线、离线)、源码编译安装、系统自带、二进制、NDB安装等。下面一个一个介绍:

使用系统自带的PG

如果以上自带版本满足了你的需求,那么就可以直接使用而无需再次安装,但是默认是没有启用自动启动和没有初始化,所以需要初始化并启用开机自启动。

  • RHEL / CentOS / SL / OL 6
service postgresql initdb
chkconfig
  • RHEL / CentOS / SL / OL 7, 8 Or Fedora 29
postgresql-setup initdb
systemctl enable

具体例子:

  • 初始化数据库
[root@localhost ~]# postgresql-setup initdb
Initializing database ... OK
  • 启用开机自动
[root@localhost ~]# systemctl enable postgresql.service
  • 打开数据库
[root@localhost ~]# systemctl start postgresql.service
  • 连接数据库(postgres用户连接)
  [root@localhost ~]# su - postgres
-bash-4.2$ psql
psql (9.2.23)
Type "help" for help.

postgres=# select version();
version
---------------------------------------------------------------------------------------------------------------
PostgreSQL 9.2.23 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16), 64-bit
(1 row)

如果想要使用​​root​​用户连接,则需要先创建用户才行,否则会报错:

[root@localhost ~]# psql
psql: FATAL: role "root" does not exist

解决方法:
使用postgres用户连接数据库,然后创建root用户即可,如下:

[root@~]#su - postgres
Last login: Wed Apr 1 10:28:10 CST 2015 on pts/2
-bash-4.2$ psql -U postgres
psql (9.4.0)
Type "help" for help.

postgres=#create user root with password 'password';
CREATE ROLE
postgres=# GRANT ALL PRIVILEGES ON DATABASE mydatabase to root;
GRANT
postgres=# ALTER ROLE root WITH SUPERUSER;

postgres=# \q

在线RPM包安装

首先卸载掉系统自带的PG数据库,再次安装新版本的PG。

卸载自带PG

[root@localhost ~]# rpm -qa|grep postgre
postgresql-libs-9.2.23-3.el7_4.x86_64
postgresql-server-9.2.23-3.el7_4.x86_64
postgresql-9.2.23-3.el7_4.x86_64
postgresql-docs-9.2.23-3.el7_4.x86_64

--要安装以下顺序依次卸载,否则会报依赖错误
[root@localhost ~]# rpm -e postgresql-server-9.2.23-3.el7_4.x86_64
[root@localhost ~]# rpm -e postgresql-docs-9.2.23-3.el7_4.x86_64
[root@localhost ~]# rpm -e postgresql-9.2.23-3.el7_4.x86_64
[root@localhost ~]# rpm -e postgresql-libs-9.2.23-3.el7_4.x86_64

安装、配置YUM源

yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

安装PG

查看当前YUM源的PG 11版本的安装包

[root@localhost ~]# yum search postgresql11
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
======================================================================= N/S matched: postgresql11 ========================================================================
postgresql11-debuginfo.x86_64 : Debug information for package postgresql11
postgresql11.x86_64 : PostgreSQL client programs and libraries
postgresql11-contrib.x86_64 : Contributed source and binaries distributed with PostgreSQL
postgresql11-devel.x86_64 : PostgreSQL development header files and libraries
postgresql11-docs.x86_64 : Extra documentation for PostgreSQL
postgresql11-libs.x86_64 : The shared libraries required for any PostgreSQL clients
postgresql11-llvmjit.x86_64 : Just-in-time compilation support for PostgreSQL
postgresql11-odbc.x86_64 : PostgreSQL ODBC driver
postgresql11-plperl.x86_64 : The Perl procedural language for PostgreSQL
postgresql11-plpython.x86_64 : The Python procedural language for PostgreSQL
postgresql11-pltcl.x86_64 : The Tcl procedural language for PostgreSQL
postgresql11-server.x86_64 : The programs needed to create and run a PostgreSQL server
postgresql11-tcl.x86_64 : A Tcl client library for PostgreSQL
postgresql11-test.x86_64 : The test suite distributed with PostgreSQL

安装客户端和server

[root@pg ~]# yum install postgresql11 postgresql11-server
省略。。。
Running transaction
Installing : postgresql11-libs-11.3-1PGDG.rhel7.x86_64 1/4
Installing : libicu-50.1.2-15.el7.x86_64 2/4
Installing : postgresql11-11.3-1PGDG.rhel7.x86_64 3/4
Installing : postgresql11-server-11.3-1PGDG.rhel7.x86_64 4/4
lei/productid | 1.6 kB 00:00:00
Verifying : postgresql11-11.3-1PGDG.rhel7.x86_64 1/4
Verifying : libicu-50.1.2-15.el7.x86_64 2/4
Verifying : postgresql11-server-11.3-1PGDG.rhel7.x86_64 3/4
Verifying : postgresql11-libs-11.3-1PGDG.rhel7.x86_64 4/4

Installed:
postgresql11.x86_64 0:11.3-1PGDG.rhel7 postgresql11-server.x86_64 0:11.3-1PGDG.rhel7

Dependency Installed:
libicu.x86_64 0:50.1.2-15.el7 postgresql11-libs.x86_64 0:11.3-1PGDG.rhel7

Complete!

初始化数据库并设置开机自启动

  • 初始化数据库
[root@pg ~]# /usr/pgsql-11/bin/postgresql-11-setup initdb
Initializing database ... OK
  • 设置开机自启动
[root@pg ~]# systemctl enable postgresql-11
  • 打开数据库
[root@pg ~]#systemctl start postgresql-11

离线RPM包安装

和在线安装方法一样,只不过需要提前把RPM包下载下来上传到服务器上进行安装即可。
下载地址:​​​https://yum.postgresql.org/rpmchart.php​​​ 根据自己的操作系统版本,下载对应的数据库版本安装即可。
只需要下载下面三个包即可:

postgresql11-libs-11.2-1PGDG.rhel7.x86_64.rpm
postgresql11-server-11.2-1PGDG.rhel7.x86_64.rpm
postgresql11-11.2-1PGDG.rhel7.x86_64.rpm

注:先安装lib包。

NDB安装[不推荐]

从PG 11版本开始,不再支持Linux“一键”安装包NDB了,PG所有安装包下载地址:​​下载地址​​如下:

PostgreSQL Version

Linux x86-64

Linux x86-32

Mac OS X

Windows x86-64

Windows x86-32

11.3

N/A

N/A

​Download​

​Download​

N/A

10.8

​Download​

​Download​

​Download​

​Download​

​Download​

9.6.13

​Download​

​Download​

​Download​

​Download​

​Download​

9.5.17

​Download​

​Download​

​Download​

​Download​

​Download​

9.4.22

​Download​

​Download​

​Download​

​Download​

​Download​

9.3.25 (Not Supported)

​Download​

​Download​

​Download​

​Download​

​Download​

下载NDB安装包

wget

安装

一键安装,其实也不方便,需要指定很多信息,比如:软件安装目录,数据文件存放目录,端口,超级用户密码、其他工具安装等等。

  • 赋可执行权限
[root@pg ~]# chmod +x postgresql-10.8-1-linux-x64.run
  • 安装
[root@pg ~]# ./postgresql-10.8-1-linux-x64.run
----------------------------------------------------------------------------
Welcome to the PostgreSQL Setup Wizard.

----------------------------------------------------------------------------
Please specify the directory where PostgreSQL will be installed.

Installation Directory [/opt/PostgreSQL/10]: --软件安装目录

----------------------------------------------------------------------------
Select the components you want to install; clear the components you do not want
to install. Click Next when you are ready to continue.

PostgreSQL Server [Y/n] :Y

pgAdmin 4 [Y/n] :Y --监控工具[可选]

Stack Builder [Y/n] :Y --[可选]

Command Line Tools [Y/n] :Y --命令行工具,需要安装

Is the selection above correct? [Y/n]: Y --确认配置

----------------------------------------------------------------------------
Please select a directory under which to store your data.

Data Directory [/opt/PostgreSQL/10/data]: --数据文件存放目录

----------------------------------------------------------------------------
Please provide a password for the database superuser (postgres). A locked Unix
user account (postgres) will be created if not present.

Password :
Retype password :
----------------------------------------------------------------------------
Please select the port number the server should listen on.

Port [5432]:

----------------------------------------------------------------------------
Advanced Options

Select the locale to be used by the new database cluster.

Locale

[1] [Default locale]

省略。。。
[768] zh_SG.utf8
[769] zh_TW.euctw
[770] zh_TW.utf8
[771] zu_ZA
[772] zu_ZA.iso88591
[773] zu_ZA.utf8
Please choose an option [1] :

----------------------------------------------------------------------------
Pre Installation Summary

The following settings will be used for the installation::

Installation Directory: /opt/PostgreSQL/10
Server Installation Directory: /opt/PostgreSQL/10
Data Directory: /opt/PostgreSQL/10/data
Database Port: 5432
Database Superuser: postgres
Operating System Account: postgres
Database Service: postgresql-10
Command Line Tools Installation Directory: /opt/PostgreSQL/10
pgAdmin4 Installation Directory: /opt/PostgreSQL/10/pgAdmin 4
Stack Builder Installation Directory: /opt/PostgreSQL/10

Press [Enter] to continue:

----------------------------------------------------------------------------
Setup is now ready to begin installing PostgreSQL on your computer.

Do you want to continue? [Y/n]: y

----------------------------------------------------------------------------
Please wait while Setup installs PostgreSQL on your computer.

Installing
0% ______________ 50% ______________ 100%
#########################################

----------------------------------------------------------------------------
Setup has finished installing PostgreSQL on your computer.

安装成功!

进入数据库

安装后数据库自动启动

[root@pg bin]# su - postgres
Last login: Tue May 28 01:56:52 EDT 2019
-bash-4.2$ psql
-bash: psql: command not found
-bash-4.2$ cd /opt/PostgreSQL/10/bin/
-bash-4.2$ pwd
/opt/PostgreSQL/10/bin
-bash-4.2$ ./psql
Password:
psql.bin (10.8)
Type "help" for help.

postgres=# select version();
version
---------------------------------------------------------------------------------------------------------
PostgreSQL 10.8 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-23), 64-bit
(1 row)

更多信息,参考:​​https://www.enterprisedb.com/downloads/postgres-postgresql-downloads​

源码编译安装

源码安装需要自己编译成安装包,然后再安装。好处是可以根据自己的需要,修改相应的配置,如:数据文件存放目录、默认端口、字符集、软件安装目录等。

要求

默认情况下,以下要求必须满足。否则无法使用某些特性,具体说明如下:

  • GUN​​make​​版本需3.8及以上版本
  [root@pg ~]# make --version
GNU Make 3.82
Built for x86_64-redhat-linux-gnu
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
  • 需安装GCC包
  • 需安装​​tar​​​包
    用于解压缩文件
  • 默认需要GNU Readline library
    其作用是可以让psql命令行记住执行过的命令,并且可以通过键盘上下键切换命令。但是可以通过​​​--without-readline​​​禁用这个特性,或者可以指定​​--withlibedit-preferred​​​选项来使用​​libedit​
  • 默认使用​​zlib​​​压缩库
    可通过​​​--without-zlib​​选项来禁用

以下是可选配置选项,如果需要使用到某些特性,那么需要安装特定的包,如下:

  • PL/Perl
    使用Perl编程语言操作PG,需要Perl版本5.8.3及以上版本
  • PL/Python
    使用Python语言操作PG,需要Python2.4及以上版本
  • PL/Tcl
    Tcl 8.4及以上版本
  • 支持加密客户端连接
    需要安装OpenSSL 0.9.8及以上版本

如果你是通过Git源码而不是官方发布的源码包,那么还需要以下包:

  • 需要Flex和Bison来从Git一个分支来编译,Flex 2.5.31以以上和Bison 1.875及以上版本。
  • Perl 5.8.3及以上版本

下载源码包

下载地址:​​https://www.postgresql.org/ftp/source/v11.3/​

[root@pg ~]# ll postgresql-11.3.tar.gz
-rw-r--r--. 1 root root 25868246 May 28 02:09 postgresql-11.3.tar.gz

解压源码包

[root@pg ~]# gunzip postgresql-11.3.tar.gz
[root@pg ~]# tar xf postgresql-11.3.tar

tar zxvf postgresql-11.3.tar.gz

注:如果你下载的是​​.bz2​​​源码包,则使用​​bunzip2​​命令来解压源码包。

配置、检查

使用​​./configure​​​来配置源码树,如果什么都不指定,则指定​​./configure​​命令即可,但是这就没必要使用源码方式来安装PG了,完全可以使用RPM包或二进制包来安装。实际环境中,如果不是特殊情况,推荐RPM包、二进制包来安装。因为源码安装复杂,容易出错,而且需要进行全面的测试才能使用。

编译常用的选项:

  • –prefile=目录
    指定软件安装目录,PG所有文件都会被默认安装到该目录的子目录下。如果不指定该选择,则默认/usr/local/pgsql。
  • –exec-prefix=目录
    在安装目录下指定目录,用于存放与体系结构相关的文件。如果不指定,则使用软件安装目录。
  • –bindir=目录
    存放PG的可执行程序,也就是–exec-prefix=​​​目录/bin​​目录。
  • –sysconfdir=目录
    指定目录,用于存放各种配置文件
  • –datadir=目录
    指定目录,用于存放安装程序使用的只读数据文件
  • –with-extra-version=STRING
    将STRING追加到PG版本号后面。
  • –with-pgport=端口
    指定PG端口号,默认:5432
  • –with-python
    构建PL/Python服务端语言,需要安装python-devel包
  • –with-perl
    构建PL/perl服务端语言
  • –with-openssl
    启用SSL加密连接,需要安装openssl-devel包
  • –with-systemd
    使用systemd来管理PG启停,需要安装systemd-devel包
  • –without-readline
    禁用psql命令行记录历史命令功能,无特殊情况不需要指定该选项。
  • –with-segsize=SEGSIZE
    设置段大小,以G为单位。大表被分成多个操作系统文件,每个文件的大小都等于段的大小(默认1G)。这避免了存在于许多平台上的文件大小限制问题。默认的段大小为1G,在所有支持的平台上都是安全的。如果您的操作系统支持“largefile”(现在大多数都支持),那么您可以使用更大的段大小。这有助于减少在处理非常大的表时使用的文件描述符的数量。但是要注意,不要选择比您的平台和您打算使用的文件系统所支持的值更大的值。您可能希望使用的其他工具,如tar,也可以设置可用文件大小的限制。建议(虽然不是绝对必需的)这个值是2的幂。注意,更改这个值需要initdb来初始化数据库。
  • –with-blocksize=BLOCKSIZE
    块大小,单位:K。这是存储和I/O的最小单位,默认8 K。不建议修改
  • –with-wal-blocksize=BLOCKSIZE
    WAL块大小,单位KB,是WAL I/O和存储的单元,范围1-64,且必须是2的N次方。
  • –enable-debug
    开启DEBUG模式,用来跟踪问题。生产环境禁用。

配置
以下选择仅仅是为了实验测试,千万不要用于生产环境
安装相关包;

yum install readline-devel gcc zlib-devel openssl-devel systemd-devel

注意:如果没有指定OPEN-SSL则不需要安装openssl-devel

编译:

[root@pg postgresql-11.3]# ./configure --prefix=/usr/local/pgsql11 --with-blocksize=16 --with-segsize=2 --with-wal-blocksize=64 --with-pgport=6543 --with-systemd --with-python --with-openssl
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking which template to use... linux
省略。。。
config.status: linking src/backend/port/dynloader/linux.h to src/include/dynloader.h
config.status: linking src/include/port/linux.h to src/include/pg_config_os.h
config.status: linking src/makefiles/Makefile.linux to src/Makefile.port

编译

检查通过后,可通过​​make​​​或​​make all​​命令即可完成编译,需要一点时间。如下:

[root@pg postgresql-11.3]# make

如果你想要把所有能够东西都编译进来,那么可以使用​​make world​​​命令,表示:把世界都编译进来。包括:HTML和man信息。
最后结果:

All of PostgreSQL successfully made. Ready to install.

出现以上信息,表示编译成功。

编译后生成的安装文件:

[root@pg postgresql-11.3]# ll ../
total 249532
-rw-------. 1 root root 1548 Nov 25 2028 anaconda-ks.cfg
-rwxr-xr-x. 1 root root 124788182 May 28 01:50 postgresql-10.8-1-linux-x64.run
drwxrwxrwx. 6 1107 1107 4096 May 28 03:19 postgresql-11.3
-rw-r--r--. 1 root root 130723840 May 28 02:09 postgresql-11.3.tar

安装

[root@pg postgresql-11.3]# make install
make[1]: Leaving directory `/root/postgresql-11.3/config'
PostgreSQL installation complete

安装成功!

如果只安装PG客户端,那么可以只执行以下命令:

make -C src/bin install
make -C src/include install
make -C src/interfaces install
make -C doc install

卸载
可通过​​​make uninstall​​命令来卸载已安装的数据库,但是不会删除已创建的目录。

清除
安装完成后,可通过​​​make clean​​命令来清除编译产生的文件,以释放磁盘空间。

查看已经安装的数据库文件

[root@pg postgresql-11.3]# ll /usr/local/pgsql11/
total 16
drwxr-xr-x. 2 root root 4096 May 28 03:31 bin
drwxr-xr-x. 6 root root 4096 May 28 03:31 include
drwxr-xr-x. 4 root root 4096 May 28 03:31 lib
drwxr-xr-x. 6 root root 4096 May 28 03:31 shar

配置环境变量

安装完成后,还需要进行一些环境变量的配置,如LD_LIBARY_PATH和PATH。

  • LD_LIBARY_PATH
    在/etc/profile或~/.bash_profile文件中添加以下内容;
LD_LIBRARY_PATH=/usr/local/pgsql11/lib
export LD_LIBRARY_PATH
  • 执行​​source /etc/profile​​​使其生效.
    也可通过setenv LD_LIBRARY_PATH /usr/local/pgsql11/lib临时配置。
    如果是Linux并且有root用户权限,也可通过以下命令
/sbin/ldconfig /usr/local/pgsql11/lib/
  • PATH
    为了方便使用PG可执行程序,如psql命令。
    在/etc/profile或~/.bash_profile文件中添加以下内容;
PATH=/usr/local/pgsql11/bin:$PATH
export PATH

初始化数据库

  • root用户创建数据文件目录并赋权限
[root@pg postgresql-11.3]# mkdir /usr/local/pgsql11/data
[root@pg postgresql-11.3]# chown postgres /usr/local/pgsql11/data
  • 使用postgres用户初始化数据库
[root@pg postgresql-11.3]# su - postgres
Last login: Tue May 28 03:44:20 EDT 2019 on pts/0
-bash-4.2$ initdb -D /usr/local/pgsql11/data/
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 "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /usr/local/pgsql11/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

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 /usr/local/pgsql11/data/ -l logfile start

打开数据库

根据上面提示,打开数据库

-bash-4.2$ pg_ctl -D /usr/local/pgsql11/data/ -l logfile start
waiting for server to start.... done
server started

查看blocksize

postgres=# show block_size;
block_size
------------
16384
(1 row)

块大小是16k,和编译保持一致。