如何在 CentOS 7 上安装 PostgreSQL

PostgreSQL 或 Postgres 是一个开源的通用的对象/关系型数据库管理系统。 PostgreSQL 具有许多高级功能,允许您创建复杂的 Web 应用程序。

在本教程中,我们将向您展示如何在 CentOS 7 计算机上安装 PostgreSQL 的两种不同方法。第一种方法将引导您完成从 CentOS 软件仓库安装 PostgreSQL v9.2.23 所需的步骤,而第二种方法将向您展示如何从官方 PostgreSQL 软件仓库安装最新版本的 PostgreSQL 。

如果您的应用程序不需要最新版本,我们建议使用第一种方法并从 CentOS 软件仓库安装 PostgreSQL 。

我们还将探讨 PostgreSQL 数据库管理的基础知识。

先决条件

在继续本教程之前,请确保以具有 sudo 权限的用户身份登录。

从 CentOS 软件仓库安装 PostgreSQL

在撰写本文时, CentOS 软件仓库中提供的最新版 PostgreSQL 是版本 9.2.23 。

要在 CentOS 服务器上安装 PostgreSQL ,请按照以下步骤操作:

  1. 安装 PostgreSQL

    先安装 PostgreSQL 服务器以及 PostgreSQL contrib 包,它为 PostgreSQL 数据库提供了几个附加功能,只需输入:

    1
    sudo yum install postgresql-server postgresql-contrib
  2. 初始化数据库

    使用以下命令初始化 PostgreSQL 数据库:

    1
    sudo postgresql-setup initdb
    1
    Initializing database ... OK
  3. 启动 PostgreSQL

    要启动 PostgreSQL 服务并使其在随机启动,只需键入:

    1
    2
    sudo systemctl start postgresql
    sudo systemctl enable postgresql
  4. 验证 PostgreSQL 安装

    要验证安装,我们将尝试使用 psql 工具连接到 PostgreSQL 数据库服务器并打印服务器版本:

    1
    sudo -u postgres psql -c "SELECT version();"
    1
    2
    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)

Psql 是一个交互式命令行实用程序,它允许我们与 PostgreSQL 服务器进行交互。

从 PostgreSQL 软件仓库安装 PostgreSQL

在撰写本文时,官方 PostgreSQL 软件仓库中提供的 PostgreSQL 的最新版本是 10.4 。在继续下一步之前,您应该访问 PostgreSQL Yum Repository 页面并检查是否有新版本可用。

按照以下步骤在 CentOS 服务器上安装最新的 PostgreSQL 版本:

  1. 启用 PostgreSQL 软件仓库

    要启用 PostgreSQL 软件仓库,只需安装 rpm 文件:

    1
    sudo yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm
  2. 安装 PostgreSQL

    启用软件仓库后,安装 PostgreSQL 服务器和 PostgreSQL contrib 包:

    1
    sudo yum install postgresql10-server postgresql10-contrib
  3. 初始化数据库

    要初始化 PostgreSQL 数据库,请输入:

    1
    sudo /usr/pgsql-10/bin/postgresql-10-setup initdb
    1
    Initializing database ... OK
  4. 启动 PostgreSQL

    要启动 PostgreSQL 服务并使其随机自启动,请输入:

    1
    2
    sudo systemctl start postgresql-10
    sudo systemctl enable postgresql-10
  5. 验证 PostgreSQL 安装

    要验证安装,我们将尝试使用该 psql 工具连接到 PostgreSQL 数据库服务器并打印服务器版本:

    1
    sudo -u postgres /usr/pgsql-10/bin/psql -c "SELECT version();"
    1
    2
    PostgreSQL 10.4 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28), 64-bit
    (1 row)

PostgreSQL 角色和身份验证方法

PostgreSQL 中的数据库访问权限是使用角色的概念处理的。角色可以表示一个数据库用户或一组数据库用户。

PostgreSQL 支持多种身份验证方法。最常用的方法是:

  • Trust - 使用此方法,只要符合在 pg_hba.conf 中定义的条件,角色就可以在没有密码的情况下进行连接。
  • Password - 角色可以通过提供密码进行连接。密码可以存储为 scram-sha-256, md5password (明文)
  • Ident - 此方法仅在 TCP/IP 连接上受支持。通过获取客户端的操作系统用户名,使用可选的用户名映射来工作。
  • Peer - 与 Ident 相同,但仅在本地连接上支持。

PostgreSQL 客户端身份验证在名为 pg_hba.conf 的配置文件中定义。默认情况下,对于本地连接, PostgreSQL 设置为使用 Peer 身份验证方法。

用户 postgres 在当您安装 PostgreSQL 时自动创建。该用户是 PostgreSQL 实例的超级用户,它相当于 MySQL 的 root 用户。

要想以 postgres 用户身份登录 PostgreSQL 服务器,您首先需要切换到 postgres 用户,然后使用该 psql 实用程序访问 PostgreSQL 提示符:

1
sudo su - postgrespsql

从这里,您可以与 PostgreSQL 实例进行交互。如果要退出 PostgreSQL shell ,请键入:

1
\q

您还可以在不使用 sudo 命令切换用户的情况下访问 PostgreSQL 提示符:

1
sudo -u postgres psql

postgres 用户通常只能从本地主机使用,建议不要为这个用户设置密码。

如果您从官方 PostgreSQL 软件仓库安装了 PostgreSQL 版本 10 ,则需要使用 psql 二进制文件的完整路径/usr/pgsql-10/bin/psql

创建 PostgreSQL 角色和数据库

只有具有 CREATEROLE 权限的超级用户和角色才能创建新角色。

在以下示例中,我们将创建一个名为 jonh 的新角色和新数据库 johndb ,并对数据库授予权限。

  1. 连接到PostgreSQL Shell

    1
    sudo -u postgres psql
  2. 创建一个新的 PostgreSQL 角色

    以下命令将创建一个名为 john 的新角色:

    1
    create role john;
  3. 创建一个新的 PostgreSQL 数据库

    使用以下 createdb 命令创建名为 johndb 的新数据库:

    1
    create database johndb;
  4. 授予权限

    要在我们在上一步中创建的数据库上向用户 john 授予权限,请运行以下查询:

    1
    grant all privileges on database johndb to john;

启用对 PostgreSQL 服务器的远程访问

默认情况下, PostgreSQL 服务器仅侦听本地接口 127.0.0.1 。为了使你的 PostgreSQL 服务器的远程访问打开配置文件 postgresql.conf ,并添加 listen_addresses = '*'CONNECTIONS AND AUTHENTICATION 部分。

1
sudo vim /var/lib/pgsql/data/postgresql.conf

如果您正在运行 PostgreSQL 版本 10 ,则该文件的路径为 /var/lib/pgsql/10/data/postgresql.conf

1
2
3
4
5
6
7
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*' # what IP address(es) to listen on;

保存文件并重启 PostgreSQL 服务:

1
sudo systemctl restart postgresql

如果您正在运行 PostgreSQL 版本 10 ,请使用 systemctl restart postgresql-10 重新启动 PostgreSQL 服务。

使用该 ss 实用程序验证更改:

1
ss -nlt | grep 5432
1
2
LISTEN   0         128                 0.0.0.0:5432             0.0.0.0:*
LISTEN 0 128 [::]:5432 [::]:*

从上面的输出可以看出, PostgreSQL 服务器正在监听所有接口( 0.0.0.0 )。

最后一步是通过编辑 /var/lib/pgsql/data/pg_hba.conf 文件将服务器配置为接受远程连接。

以下是一些显示不同用例的示例:

1
2
3
4
5
6
7
8
9
10
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# The user jane will be able to access all databases from all locations using a md5 password
host all jane 0.0.0.0/0 md5

# The user jane will be able to access only the janedb from all locations using a md5 password
host janedb jane 0.0.0.0/0 md5

# The user jane will be able to access all databases from a trusted location (192.168.1.134) without a password
host all jane 192.168.1.134 trust

如果您运行的是 PostgreSQL 版本 10 ,则该文件的完整路径为 /var/lib/pgsql/10/data/pg_hba.conf

结论

您已经学习了如何在 CentOS 7 服务器上安装和配置 PostgreSQL 。

有关此主题的更多信息,请参阅 PostgreSQL 文档