说明
目前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 | N/A | ||
10.8 | |||||
9.6.13 | |||||
9.5.17 | |||||
9.4.22 | |||||
9.3.25 (Not Supported) |
下载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,和编译保持一致。