首页
Linux教程
MongoDB教程
FTP教程
Apache教程
Nginx
jQuery
Redis
MySQL
PostgreSQL教程
PHP教程
Elasticsearch

PostgreSQL教程

目录
PostgreSQL教程

PostgreSQL安装


一、系统环境

  1. 操作系统:CentOS
  2. PostgresSQL版本:12.1

二、下载软件

  1. 官网网址:https://www.postgresql.org/ftp/source/
  2. 喆为大学堂网址:http://src.12cc.com/postgresql-12.1.tar.gz
  3. 把压缩文件下载到你的服务器上。

    [root@iZm5e4blwrqoe0dh9gcyluZ /usr/local/src]# wget http://src.12cc.com/postgresql-12.1.tar.gz

    文件下载完后,接着把文件解压到当前目录里。

    [root@iZm5e4blwrqoe0dh9gcyluZ /usr/local/src]# tar -zxvf ./postgresql-12.1.tar.gz

    解压完成,在当前目录下会自动生成一个文件夹"postgresql-12.1",我们要的源文件全部在这文件夹里。进入该文件夹。

    [root@iZm5e4blwrqoe0dh9gcyluZ /usr/local/src]# cd postgresql-12.1
    [root@iZm5e4blwrqoe0dh9gcyluZ /usr/local/src/postgresql-12.1]#

    注意当前路径的变化。

三、编译安装

    查看当前文件夹有哪些文件。

    我们要的编译文件就是:configure
    执行以下命令编译。

    [root@iZ28lcmnq9qZ /usr/local/src/postgresql-12.1]# ./configure --prefix=/usr/local/pgsql

    参数:--prefix=/usr/local/pgsql
    表示编译好的文件放到目录"/usr/local/pgsql"里,这个目录不用用户自己创建,编译过程会自动创建。

    PostgreSQL编译过程会用到一些依赖的库,如果你的操作系统比较旧,编译过程可能会出现错误,告诉你要安装缺少的依赖库。

    我们编译时就出现了没有C编译器的报错。执行以下命令解决。

    [root@iZ28lcmnq9qZ /usr/local/src/postgresql-12.1]# yum install gcc

    安装完gcc后再次编译postgres,再次发现提示缺少readline库,如下图:

    但是通过rpm -qa | grep readline命令查看,发现系统默认是自带readline包的,如下图:

    那么肯定还是缺少与readline相关的包了,通过yum search readline进行搜索可以发现一个readline-devel包,如下图:

    其实我们缺少的正是这个readline开发包(readline-devel),而不是readline包,所以接下来安装一下readline-devel,指令如下。

    [root@iZ28lcmnq9qZ /usr/local/src/postgresql-12.1]# yum install readline-devel

    安装完成后再次编译PostgreSQL,还是报错,这次提示缺少zlib库,如下图。

    同理,缺少的依然是zlib开发包(zlib-devel)而并不是zlib包,所以继续安装zlib-devel。

    [root@iZ28lcmnq9qZ /usr/local/src/postgresql-12.1]# yum install zlib-devel

    安装完成后,再次编译PostgreSQL,成功了,可以看到提示创建了config.status配置文件:

    编译完成后,依次执行以下指令,完成安装任务。

    [root@iZ28lcmnq9qZ /usr/local/src/postgresql-12.1]# make
    [root@iZ28lcmnq9qZ /usr/local/src/postgresql-12.1]# make install

    完成以后,在"--prefix=/usr/local/pgsql"参数对应的"/usr/local/pgsql"的目录就是我们所有PostgreSQL存放的文件。

四、用户权限与环境变量设置

    编译安装成功后,接下来要做的就是创建一个普通用户,因为默认Linux超级用户(root)不能启动PostgreSQL,所以需要创建一个普通用户来操作数据库。

    创建用户

    [root@iZ28lcmnq9qZ /usr/local/pgsql]#groupadd postgres #创建postgres用户组
    [root@iZ28lcmnq9qZ /usr/local/pgsql]# useradd -g postgres -G postgres -d /home/postgresql postgres #创建postgres用户
    [root@iZ28lcmnq9qZ /usr/local/pgsql]# passwd postgres #设置postgres用户的密码

    创建PostgreSQL数据目录和日志目录

    执行以下指令。

    [root@iZ28lcmnq9qZ /usr/local/pgsql]#mkdir data
    [root@iZ28lcmnq9qZ /usr/local/pgsql]#mkdir log

    接下来需要设置权限,将/usr/local/pgsql (我们安装PostgreSQL数据库的目录) 目录全部赋权给postgres用户,指令如下。

    [root@iZ28lcmnq9qZ /usr/local/pgsql]#cd .. //返回上一层目录
    [root@iZ28lcmnq9qZ /usr/local]#chown -R postgres:postgres /usr/local/pgsql/

    设置环境变量

    为了方便起见设置一下相关的环境变量,此处是要设置postgres用户的环境变量,所以首先要把Linux的登陆用户由root切换到以postgres用户登陆,指令如下。

    [root@iZ28lcmnq9qZ /usr/local]#su - postgres

    因为我们创建Linux用户"postgres"是指定了用户的目录为"/home/postgresql",所以登陆后显示的目录是:[postgres@iZ28lcmnq9qZ /home/postgresql]$

    要创建环境变量,实际上就是对文件.bash_profile的修改,所以我们首先要找到这个文件,这个文件就在"/home/postgresql"里。我们用以下指令查看是不是有这个文件。

    [postgres@iZ28lcmnq9qZ /home/postgresql]$ll

    奇怪的是,目录下并没有发现".bash_profile"文件,原因是".bash_profile"是一个隐藏的文件,用指令"ll"是看不到的,要加上参数"-a",指令如下。

    编辑".bash_profile"文件。

    [postgres@iZ28lcmnq9qZ /home/postgresql]$vim .bash_profile

    插入下图红框内容。

    要使设置的环境变量".bash_profile"生效,可以执行指令。

    [postgres@iZ28lcmnq9qZ /home/postgresql]$source ./.bash_profile

    检查是否生效,可以用以下指令。

    [postgres@iZ28lcmnq9qZ /home/postgresql]$psql -V

    如果成功,会显示PostgreSQL的版本信息。

五、初始化数据库

    新安装的PostgreSQL数据库系统,要先初始化基本的基础数据库,然后我们才能在上面创建我们自己的数据库。

    初始化数据库的指令是"initdb",这个指令位于"/usr/local/pgsql/bin/"

    我们可以用指令"initdb --help"看看这个文件的帮助信息。

    如上图,可以看到在使用"initdb"进行初始化的时,可以指定参数进行一些初始化工作,例如指定pgdata(postgresql数据库目录)、指定encoding(编码)、指定数据库超级用户的用户名和密码等等。注意,如果pgdata目录没有指定,则会默认使用环境变量中的PGDATA指定的目录作为数据库存放的目录,由于之前我们刚刚设置了"PGDATA=/usr/local/pgsql/data"环境变量,所以此处我们也就无需再额外指定,直接执行初始化命令即可。

    [root@iZ28lcmnq9qZ /usr/local/pgsql]#initdb

    看到如下信息就说明初始化成功了。

    同时在"/usr/local/pgsql/data]"的目录可以看到生成的数据和配置文件等。

  1. base目录是表空间目录
  2. global目录是相关全局变量的目录
  3. pg_hba.conf是访问控制配置,127.0.0.1改为信任的客户端ip网段使其可以远程访问
  4. postgresql.conf是PostgreSQL主配置文件,"listen_address=localhost"改为"*"使其监听整个网络,方便起见我这里将pg_hba.conf的ip地址修改为0.0.0.0/0,而加密方式改为md5,就表示需要密码访问,算是提供一个最低级的安全防护:

六、数据库访问控制配置文件

    主要是配置postgresql.conf 和 pg_hba.conf 个。
    1.postgresql.conf 针对实例的配置
    2.pg_hba.conf 针对数据库访问的控制

  1. postgresql.conf

    [root@iZ28lcmnq9qZ /usr/local/pgsql/data]#vim postgresql.conf

    找到"#port"和"#listener_address"这两个参数,这两个参数是相邻的,将两行行首的"#"删除。
    将"listen_addressee='localhost'"改为当前服务器的IP,如果改为"listen_addressee='*'",将监听整个网络。
    默认的监听端口是5432,可以自行指定另外一个端口号。
    max_connections是客户端最大的连接数, 缺省值100有点少,特别是业务系统,可以调整成1000或者更高。

  2. pg_hba.conf

    [root@iZ28lcmnq9qZ /usr/local/pgsql/data]#vim pg_hba.conf

    如何将红框设置为 10.10.100.0/24,意思是10.10.100网段的IP 连接此服务器上的PostgreSQL. 如果想允许所有IP都可以连接此服务器,则可以配置成0.0.0.0/0,但这样是不安全的,可以把trust改为md5,表示需要密码访问,算是提供一个最低级的安全防护。

七、PostgreSQL启动与关闭

  1. 手动

    启动与关闭数据库是执行pg_ctl命令,在执行时,需要指定数据库路径和日志文件路径,格式如下。

    pg_ctl -D <数据存放路径> -l <日志文件路径> [ stop | start ]

    如果已经指定了环境变量PGDATA,"数据存放路径"参数可以省略。

    [root@iZ28lcmnq9qZ /usr/local/pgsql/data]#pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/log/pg_server.log start

    可以通过ps -ef|grep postgres查看PostgreSQL相关进程是否启动,如下图说明已启动成功。

  2. 关闭数据库执行以下指令。

    [root@iZ28lcmnq9qZ /usr/local/pgsql/data]#pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/log/pg_server.log stop

  3. 开机自动启动

    此步骤需要root用户操作,如果你是用PostgreSQL的用户postgres登陆的话,要用exit指令退出,回到root登陆才能操作。
    PostgreSQL解压后的安装包目录中提供了数据库启动与关闭的脚本,此脚本不但可以帮助我们简化操作,而且可以用作开机启动的脚本和service/systemctl 控制服务的脚本。 脚本文件就位于我们下载后解压文件的目录里:/usr/local/src/postgresql-12.1/contrib/start-scripts

    目录里"linux"文件就是我们要找的文件。

    设置开机启动

    执行以下指令。

    [root@iZ28lcmnq9qZ /usr/local/pgsql/data]#cp /usr/local/src/postgresql-12.1/contrib/start-scripts/linux /etc/init.d/postgresql
    [root@iZ28lcmnq9qZ /usr/local/pgsql/data]#chkconfig --add postgresql
    [root@iZ28lcmnq9qZ /usr/local/pgsql/data]#chmod 755 /etc/init.d/postgresql

    把文件"linux"拷贝到目录"etc/init.d/"下,并改名为postgresql。
    把脚本文件"postgresql"加入到开机启动的程序列表。
    赋予"postgresql"文件有执行的权限。

    主要设置文件"postgresql"的四个变量的值。

    [root@iZ28lcmnq9qZ /usr/local/pgsql/data]#vim /etc/init.d/postgresql

    prefix=/usr/local/pgsql
    PGDATA="/usr/local/pgsql/data"
    PGUSER=postgres
    PGLOG="$PGDATA/serverlog"

    prefix 是软件的安装路径
    PGDATA 是数据存放路径
    PGUSER 是启动PostgreSQL服务器的用户
    PGLOG 是日志文件

    以后可以开机启动和通过service 命令控制启动和关闭了。

    [root@iZ28lcmnq9qZ /usr/local/pgsql/data]#service postgresql start
    [root@iZ28lcmnq9qZ /usr/local/pgsql/data]#service postgresql stop

八、客户端连接测试

    可以通过PostgreSQL自带的客户端工具程序psql来进行连接,这个psql指令文件位于/usr/local/pgsql/bin目录下,因为我们做了变量环境设置,所以可以在任何目录下直接输入psql连接PostgreSQL服务器。

    温馨提示:用客户端程序psql连接数据库前,要把当前Linux登陆用户从root切换到postgres用户,这个是我们创建的PostgreSQL的超级用户。

    [root@iZ28lcmnq9qZ /usr/local/pgsql/data]#su - postgres
    [postgres@iZ28lcmnq9qZ /home/postgresql]$psql

    可以看到,已经连接上了数据库服务器,而且当前连接的是PostgreSQL的缺省数据库postgres。现在我们可以在这个命令行用SQL语言操作PostgreSQL数据库。

    设置用户postgres的密码

    postgres=# \password

    命令"\l"是显示数据库。更多的SQL操作命令可以参考PostgreSQL的官方文档。

    退出pgsql客户端命令是"\q"。

PostgreSQL安装到此完毕。